Objective-C(十9、通知-消息发送模式之中的一个)——iOS开发基础


结合以前的学习笔记以及參考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。css

知识点一直在变。仅仅是做为參考。以苹果官方文档为准~编程


十9、通知-消息发送模式之中的一个markdown


一、几个基本概念
(1)通知:在面向对象的程序中。有时需要将发生的时间通知给多个对象的消息发送模式;
(2)通知中心:指望取得通知的对象预先向通知中心注冊指望取得的通知;
(3)发送:某对象向通知中心发送消息发送请求,仅仅有注冊过该通知单额对象,均可得到通知中心推送的消息;
(4)观察者:消息发送目标,在通知中心注冊的对象(可以有多个)。
(5)多播:某个对象向特定的多个对象发送消息,通知就是多播的一种post


二、通知对象:向通知中心发送消息,必要的信息会在NSNotification类实例中集中后发送给通知中心学习

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

变量说明:
aName:识别通知的短文本。向NSNotification接口发送例如如下消息可取出名字
anObject:和通知一块儿发送的附带信息的对象,多为发送通知的对象,也可为nil
userInfo:传递和通知相关的各类信息,也可为nilui


三、通知中心NSNotificationCenter
(1)系统有默认的通知中心。通常不用本身建立。spa

类方法获取指针

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

(2)通知发送code

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

指定通知名、对象和用户字典生成通知。而后发送给接收者的通知中心server


(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开发”

相关文章
相关标签/搜索