js_*_*js_ 3 iphone objective-c ios observer-pattern
我已经addObserver:selector:name:object:进入了viewDidLoad.
我正在用removeObserver:name:object:它viewWillDisappear:animated:来移除观察者.
如果我通过传递错误的参数来删除观察者,会发生什么removeObserver:name:object:?
(例如,如果我向参数name或错误对象传递错误通知,则不会删除观察者object或Observer)
如果观察者在调用后仍然不是nil removeObserver:name:object:,我可以发现删除观察者失败,因为notifySelector将被调用.
但如果观察者在打电话后变为零removeObserver:name:object:,我就无法确定是否移除观察者是否失败.
当观察者变为零时,观察者会自动移除吗?
或做notification dispatch table的NSNotificationCenter越来越大,大,并最终应用变得慢?
编辑
当我为观察者使用UIViewController对象的子类时,在dealloc调用ViewController之后应用程序不会崩溃.
但是当我使用其他类的对象时,应用程序会在dealloc调用对象后崩溃.
Mar*_*n R 10
更新:来自-[NotificationCenter removeObserver:]:
如果您的应用面向iOS 9.0及更高版本或macOS 10.11及更高版本,则无需在其
dealloc方法中取消注册观察者.否则,你应该调用此方法或removeObserver:name:object:观察员之前或在指定的任何目标addObserverForName:object:queue:usingBlock:或addObserver:selector:name:object:将被释放.
老答案:
观察者不会自动删除.从NSNotificationCenter类参考:
重要提示:通知中心不会保留其观察者,因此,您必须确保在取消分配之前取消注册观察者(使用removeObserver:或removeObserver:name:object :).(如果不这样做,如果中心向释放的对象发送消息,则会生成运行时错误.)
你应该打电话
[[NSNotificationCenter defaultCenter] removeObserver:self];
Run Code Online (Sandbox Code Playgroud)
在你的dealloc方法中,如果你不是100%确定以前没有删除观察者.
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |