1. 程式人生 > >Objective-C(十九、通知-訊息傳送模式之一)——iOS開發基礎

Objective-C(十九、通知-訊息傳送模式之一)——iOS開發基礎

結合之前的學習筆記以及參考《Objective-C程式設計全解(第三版)》,對Objective-C知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準~

十九、通知-訊息傳送模式之一

1、幾個基本概念
(1)通知:在面向物件的程式中,有時需要將發生的時間通知給多個物件的訊息傳送模式;
(2)通知中心:期望取得通知的物件預先向通知中心註冊期望取得的通知;
(3)傳送:某物件向通知中心傳送訊息傳送請求,只有註冊過該通知單額物件,都可獲得通知中心推送的訊息;
(4)觀察者:訊息傳送目標,在通知中心註冊的物件(可以有多個);
(5)多播:某個物件向特定的多個物件傳送訊息,通知就是多播的一種

2、通知物件:向通知中心傳送訊息,必要的資訊會在NSNotification類例項中集中後傳送給通知中心

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName
                              object:(id)anObject
                            userInfo:(NSDictionary *)aUserInfo
;

變數說明:
aName:識別通知的短文字,向NSNotification介面傳送如下訊息可取出名字
anObject:和通知一起傳送的附帶資訊的物件,多為傳送通知的物件,也可為nil
userInfo:傳遞和通知相關的各種資訊,也可為nil

3、通知中心NSNotificationCenter
(1)系統有預設的通知中心,一般不用自己建立。類方法獲取

+ (NSNotificationCenter *)defaultCenter;
[NSNotificationCenter defaultCenter];

(2)通知傳送

- (void)postNotification:(NSNotification
*)
notification; - (void)postNotificationName:(NSString *)aName object:(id)anObject; - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

指定通知名、物件和使用者字典生成通知,然後傳送給接收者的通知中心

(3)觀察者註冊

- (void)addObserver:(id)observer
           selector:(SEL)aSelector
               name:(NSString *)aName
             object:(id)anObject;

變數說明:
observer:通知的監聽者
aSelector:收到通知後,會呼叫observer的此方法。
aName:通知名,當不為nil時,只接受特定物件傳送的通知;如果未nil表示沒有設定的傳送源
object:通知的傳送者

僅指定特定的多個通知名的通知時,可以將各個通知名分別在通知中心註冊,或者指定通知名為nil使其傳送有關所有通知名的訊息,並在接收後只處理必要的訊息;兩者都為nil則可以接收所有關於傳送訊息的通知(這是書上原話)

(4)刪除觀察者的註冊

- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer
                  name:(NSString *)aName
                object:(id)anObject;
[NSNotificationCenter defaultCenter] removeObserver:obj];

(5)關於記憶體管理
(1)在引用計數管理的情況下,通知中心在註冊觀察者時,並不retain觀察者及傳送元物件。因此釋放這些物件之前,要確實從通知中心刪除相關設定。否則指向釋放物件的指標會變成空指標;(即要remove)
(2)在垃圾回收機制時,通知者和傳送源物件會使用弱引用在通知中心註冊。無論是否註冊,都可能被回收釋放。無需顯式刪除觀察者的註冊;

我個人簡單地理解一下,就是下面幾句白話~

(1)通知中心有預設的,不要糾結它到底在哪裡,要不要建立,只要抓好傳送通知和觀察者就可以;
(2)可以有多個觀察者,註冊便是;
(3)通知物件可以不用創立,直接傳送通知就可以了;
(4)觀察者的地方add,remove;
(5)name為nil,可以接受所有傳送的通知

這部分的程式碼例子,請參考下一篇
“通知模式實現兩個textField傳值及模態檢視——iOS開發”

相關推薦

Objective-C(通知-訊息傳送模式之一)——iOS開發基礎

結合之前的學習筆記以及參考《Objective-C程式設計全解(第三版)》,對Objective-C知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準~ 十九、通知-訊息傳送模式之一 1、幾個基本概念 (1)通知:在面向物件的

C# 三Queue

定義 一、初始化 System.Collections.Generic.Queue`1 類的新例項,該例項為空並且具有預設初始容量。 Queue<資料型別> 識別符號 = new Queue<資料型別>(); 二、初始化 System.Col

動態加載腳本和樣式

所有 load 忽略 報錯 需求 flag mil ans n) 十九、動態加載腳本和樣式 本章主要講解上一章剩余的獲取位置的DOM方法、動態加載腳本和樣式。 1.元素位置 上一章已經通過幾組屬性可以獲取元素所需的位置,那麽這節課補充一個DOM的方法:getBoun

壓縮打包介紹gzip壓縮工具把bzip2壓縮工具xz壓縮工具

gzip bzip2 xz 十九、壓縮打包介紹、gzip壓縮工具、把bzip2壓縮工具、xz壓縮工具一、壓縮打包介紹windows下接觸的壓縮文件大多是.rar,.7z格式,Linux下,不能識別這種格式。.zip格式的文件在Windows和Linux下都能使用。壓縮文件,能節省磁盤空間,傳輸時能

w查看系統負載vmstat命令top命令sar命令nload命令

w命令 vmstat命令 top命令 sar命令 nload命令 二十九、w查看系統負載、vmstat命令、top命令、sar命令、nload命令一、使用w查看系統負載 # w 06:10:09 up 6:20, 1 user, load average: 0.00, 0.01, 0

安裝PHP5安裝PHP7

PHP5 PHP7 一、安裝PHP5PHP官網www.php.net。主流版本5.6,7.1。如果你的程序,PHP代碼能用PHP7就用7,不能用就用5,PHP7的性能有很大提升。# cd /usr/local/src/# wget http://cn2.php.net/distributions/ph

Nginx防盜鏈Nginx訪問控制Nginx解析PHP相關配置Nginx代理

Nginx防盜鏈 Nginx訪問控制 Nginx解析PHP相關配置 Nginx代理 四十九、Nginx防盜鏈、Nginx訪問控制、Nginx解析PHP相關配置、Nginx代理一、Nginx防盜鏈 必須和“不記錄日誌和過期時間”結合在一起,因為它們同時用到了location。# v

模塊和包

http 變化 圖片 發現 .py 一個 遇到 bsp pri 什麽叫做包:簡單點說就是帶_init_.py文件的文件夾就是包。當我們去調用這個包的時候其實是優先執行了包裏面的_init_文件。而包裏面的其他的py文件就是模塊 1.當我們需要直接調用某模塊的時候,而又不確定

for循環while循環break跳出循環continue結束本次循環exit退出整

for循環 while循環 break跳出循環 continue結束本次循環 exit退出整個腳本 六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整個腳本一、for循環 語法:for 變量名 in 條件; do …; done 案例1#

python面向對象一

對象 創建對象 ica 多個 普通 ret super 面向對象 技術 A、python面向對象 1.面向對象基礎:面向對象三個特性:封裝,繼承,多態C# java 只能用面向對象編程Ruby,python 函數+面向對象 函數式編程:def 函數def f1(a

dbms_resource_manager(用於維護資源計劃,資源使用組和資源計劃指令)

The sys 新的 lan 活動 相關 use dba grant 1、概述 作用:用於維護資源計劃,資源使用組和資源計劃指令;包dbms_resource_manager_privs用於維護與資源管理相關的權限. 2、包的組成 1)、dbms_resource_m

python學習之Django框架(二):請求URL路徑引數查詢字串請求體(表單,非表單)請求頭

一、請求 1.flask中,利用HTTP協議想伺服器傳參的幾種途徑 1.1 提取URL的特定部分,可以在伺服器端的路由中用正則表示式擷取: 如:/weather/2018 //前端傳送請求: $.ajax({ url:'http://www.baidu.com/

《激盪三年》腳下的路——對中國經濟未來的猜想

超出《激盪三十年》書本之外,讓我們一起把回望的目光從過去的激盪歲月中轉移回來,放眼當下。中國未來的經濟發展究竟會如何呢?正所謂三十年河東三十年河西。中國的河西之路,是會像之前的三十多年持續保持高速成長還是轉而調頭下挫呢?中國的經濟到底有沒有未來?這應該是今天我們每個人都關心的話題,那這一期節目我們

從零開始之驅動發開linux驅動(二mmap原理)

一、概念 mmap是一種記憶體對映檔案的方法,即將一個檔案或者其它物件對映到程序的地址空間,實現檔案磁碟地址和程序虛擬地址空間中一段虛擬地址的一一對映關係。實現這樣的對映關係後,程序就可以採用指標的方式讀寫操作這一段記憶體,而系統會自動回寫髒頁面到對應的檔案磁碟上,即完成了對檔案的操作而不必

Filter

一、Filter簡介   Filter也稱之為過濾器,它是Servlet技術中最激動人心的技術之一,WEB開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp,Servlet, 靜態圖片檔案或靜態html檔案等進行攔截,從而實現一些特殊的功能。例如實現URL級別的許可權

顯式遊標的基本使用

                        

例項事件

                        

easyUI入門《二form案例:表單提交以及驗證重置清空》

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <!--引入

分割槽表的建立及清理

1、分割槽表建立 --範圍分割槽示例 drop table range_part_tab purge; --注意,此分割槽為範圍分割槽 create table range_part_tab (id number,deal_date date,area_code number,con

物件的構造順序

C++中的類可以定義多個物件,物件的構造順序是怎樣的? 1、物件的構造順序一 對於區域性物件:當程式執行流到達物件的定義語句時進行構造:物件定義->構造 #include <stdio.h> class Test { private: int mi; public: T