码迷,mamicode.com
首页 > Web开发 > 详细

Notifications:关于MVC模型中的'radio station'

时间:2015-10-15 15:53:36      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

转载请注明来源,谢谢——by Guava

Notification 既iOS中的“通知”(广播站)机制可以用来监听系统、模型的变化。

接收端:

通过

[NSNotificationCenter defaultCenter]

获得一个共享实例,就用这个对象来接收广播。

收听广播的方法是,向对象发送消息:

- (void)addObserver:(id)observer // you (the object to get notified) 收听广播的对象,对一般的controller来说是self。
           selector:(SEL)aSelector // a mothod inside of the observer . 收听的对象中的某个方法。当广播出现时调用这个方法。
               name:(nullable NSString *)aName //name of station.
             object:(nullable id)anObject;// whose changes you‘re interested in (nil is anyone‘s) 这个选项是nil的时候,可以收听来自任何对象的广播,当有值的时候,只收听来自该对象的广播。一般来说,设置成nil。

接下来是,我们有可能感兴趣(真正感兴趣的往往不是值的传递,而是是否发生了广播)的地方,是广播中传递了什么值,或者说,怎么获得广播中传递的值,以下是如果出现广播时,被调用到的方法:

- (void)aSelector:(NSNotification *) notification//这个方法的名字,应该和上面消息中传入的selector 的名字的一样的。
{
    notification.name; //the name passed about. 广播站的名称,和上面消息中传递的name的值是一样的。
    notification.object; //the object sending you notification. 发送广播的对象,对应着上面的sender。
    notification.userInfo; //notification-specific information about what happened. 包含的内容取决于发送广播的对象在里面存了什么内容
}

notification.userInfo实际上是一个NSDictionary,取数据的时候,还是需要用[notification.userInfo objectForKey:keyName]来取的。

如果不知道里面放着什么(也许是一个id类),也许会需要isKindOfClass或者respondsToSelector来使用它。

接收方最后一步处理,是关于把自己移除出广播机制的问题。在比较早先的版本,指向observer的指针是一个不安全保留型(unsafe retain),详情可见

http://study.163.com/plan/planLearn.htm?id=1533019#/learn/resVideo?lessonId=263037

这个视频的57--60分钟。

或者文字版的:

http://www.cnblogs.com/coco-bao9107/p/4249705.html

然而这个指针的问题在现在(2015.10)已经得到了解决(亲测)。(如果有空的话后续会上传githu,届时更新链接)。

至于解决的方式,应该是依照白胡子老爷爷的想法,将该指针变成了一个weak的指针(个人推测)。

测试的结果是,当页面从堆里面释放之后,发送广播,没有反应,应用也没有崩溃。这显然是一个大家都想看到的结果(偷懒的没有写remove也不会造成应用崩溃了)。

 

Notifications:关于MVC模型中的'radio station'

标签:

原文地址:http://www.cnblogs.com/guavakingfeng/p/4881921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!