n一個(gè)完整的通知一般包含3個(gè)屬性:
?- (NSString*)name;//通知的名稱
?- (id)object;//通知發(fā)布者(是誰(shuí)要發(fā)布通知)
?- (NSDictionary*)userInfo;//一些額外的信息(通知發(fā)布者傳遞給通知接收者的信息內(nèi)容)
初始化一個(gè)通知(NSNotification)對(duì)象
?+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject;
?+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
- (instancetype)initWithName:(NSString*)name object:(id)object userInfo:(NSDictionary*)userInfo
發(fā)布通知的方法:
一般用 [NSNotificationCenterdefaultCenter] 方法來(lái)創(chuàng)建通知中心通知中心(NSNotificationCenter)提供了相應(yīng)的方法來(lái)幫助發(fā)布通知
n- (void)postNotification:(NSNotification*)notification;
?發(fā)布一個(gè)notification通知阔籽,可在notification對(duì)象中設(shè)置通知的名稱锅劝、通知發(fā)布者、額外信息等
n- (void)postNotificationName:(NSString*)aName object:(id)anObject;
?發(fā)布一個(gè)名稱為aName的通知黑忱,anObject為這個(gè)通知的發(fā)布者
n- (void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
?發(fā)布一個(gè)名稱為aName的通知巍虫,anObject為這個(gè)通知的發(fā)布者字支,aUserInfo為額外信息
通知中心(NSNotificationCenter)提供了方法來(lái)注冊(cè)一個(gè)監(jiān)聽(tīng)通知的監(jiān)聽(tīng)器(Observer)
n- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString*)aName object:(id)anObject;
?observer:監(jiān)聽(tīng)器鉴象,即誰(shuí)要接收這個(gè)通知
?aSelector:收到通知后抑胎,回調(diào)監(jiān)聽(tīng)器的這個(gè)方法梨撞,并且把通知對(duì)象當(dāng)做參數(shù)傳入
?aName:通知的名稱雹洗。如果為nil,那么無(wú)論通知的名稱是什么卧波,監(jiān)聽(tīng)器都能收到這個(gè)通知
?anObject:通知發(fā)布者时肿。如果為anObject和aName都為nil,監(jiān)聽(tīng)器都收到所有的通知
第二種注冊(cè)監(jiān)聽(tīng)器的方法
n- (id)addObserverForName:(NSString*)name object:(id)obj queue:(NSOperationQueue*)queue usingBlock:(void(^)(NSNotification*note))block;
?name:通知的名稱
?obj:通知發(fā)布者
?block:收到對(duì)應(yīng)的通知時(shí)港粱,會(huì)回調(diào)這個(gè)block
?queue:決定了block在哪個(gè)操作隊(duì)列中執(zhí)行螃成,如果傳nil,默認(rèn)在當(dāng)前操作隊(duì)列中同步執(zhí)行
n取消注冊(cè)通知監(jiān)聽(tīng)器
通知中心不會(huì)保留(retain)監(jiān)聽(tīng)器對(duì)象查坪,在通知中心注冊(cè)過(guò)的對(duì)象寸宏,必須在該對(duì)象釋放前取消注冊(cè)。否則偿曙,當(dāng)相應(yīng)的通知再次出現(xiàn)時(shí)氮凝,通知中心仍然會(huì)向該監(jiān)聽(tīng)器發(fā)送消息。因?yàn)橄鄳?yīng)的監(jiān)聽(tīng)器對(duì)象已經(jīng)被釋放了望忆,所以可能會(huì)導(dǎo)致應(yīng)用崩潰
n通知中心提供了相應(yīng)的方法來(lái)取消注冊(cè)監(jiān)聽(tīng)器
?- (void)removeObserver:(id)observer;
?-(void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;
n一般在監(jiān)聽(tīng)器銷毀之前取消注冊(cè)(如在監(jiān)聽(tīng)器中加入下列代碼):
- (void)dealloc {
//[super dealloc];非ARC中需要調(diào)用此句
[[NSNotificationCenterdefaultCenter]removeObserver:self];
}