而對於通知代理block的選擇 1)若是數據傳遞兩個對象沒有聯繫。選擇通知。函數
2)若是兩個對象有聯繫的話,三個均可以。post
3)能用代理的地方 必定也能夠用block去代替。代理
首先說一下通知。code
發佈通知的方法: 通常用 [NSNotificationCenter defaultCenter] 方法來建立通知中心通知中心(NSNotificationCenter)提供了相應的方法來幫助發佈通知server
- (void)postNotification:(NSNotification*)notification;
發佈一個notification通知,可在notification對象中設置通知的名稱、通知發佈者、額外信息等對象
- (void)postNotificationName:(NSString*)aName object:(id)anObject;
發佈一個名稱爲aName的通知,anObject爲這個通知的發佈者隊列
- (void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
發佈一個名稱爲aName的通知,anObject爲這個通知的發佈者,aUserInfo爲額外信息rem
通知中心(NSNotificationCenter)提供了方法來註冊一個監聽通知的監聽器(Observer)同步
- (void)addObserver:(id)observer selector:(SEL)aSelector name (NSString*)aName object:(id)anObject;
第二種註冊監聽器的方法io
- (id)addObserverForName:(NSString*)name object:(id)obj queue:(NSOperationQueue*)queue usingBlock:(void (^)(NSNotification*note))block;
name:通知的名稱
obj:通知發佈者
block:收到對應的通知時,會回調這個block
queue:決定了block在哪一個操做隊列中執行,若是傳nil,默認在當前操做隊列中同步執行
取消註冊通知監聽器 通知中心不會保留(retain)監聽器對象,在通知中心註冊過的對象,必須在該對象釋放前取消註冊。不然,當相應的通知再次出現時,通知中心仍然會向該監聽器發送消息。由於相應的監聽器對象已經被釋放了,因此可能會致使應用崩潰
通知中心提供了相應的方法來取消註冊監聽器
-(void)removeObserver:(id)observer; -(void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;
而後說一下代理。也是我的最喜歡用的。要分清被代理者和代理者。
被代理者 有四部分
1)首先定義代理(協議名稱的命名規範:控件類名+Delegate)
2)定義代理方法。(須要傳遞的屬性,還有把本身自己傳過去)這裏要注意。代理
3)設置屬性。這裏要注意代理的屬性要使用weak。
4)在須要傳遞值的地方去調用代理的方法。(要判斷代理方法是否能夠調用)
在代理者須要三步。
1)遵照代理協議。
2)設置代理。
3實現代理方法
我的以爲代理比較簡單。並且比較好理解。很是的規整。
下面說一下第三種Block
1)首先要在須要傳遞數據的類中定義一個block 屬性爲要傳遞數據的類型
block的屬性要和NSString 同樣 爲copy.
2)在須要傳遞數據的地方 實現Blcok方法。首先要判斷block是否可用。
而後把數據回調。
3)在須要數據的類中定義一個block 把數據接過去。
我的理解 block比代理要簡單。
可是代理會看着比較清晰。讓人理解。
所執行的步驟也都差很少。
只是把被代理者中的設置代理 轉變成設置block接過去。而後設置一個Block去接一下回調的值。