我想检查一下我的观点是否正在收听UIApplicationWillResignActiveNotification。如果它正在监听,那么我想在dealloc期间删除它。现在我想知道是否有办法用目标c做到这一点?
我没有尝试避免多次添加通知。以下是对我要做的事情的更多解释。
我有自定义gridView。我可以通过启用扩展或禁用扩展来初始化它。如果启用了扩展的init,则将其自身添加为UIApplicationWillResignActiveNotification的观察者,但如果其init已禁用扩展,则它不会将自身添加为该通知的观察者。现在,在dealloc中我想删除该gridView作为该通知的观察者。所以我想知道是否有办法找出gridView是否正在收听该通知。
答案 0 :(得分:2)
我不知道有什么方法可以检查观察者正在侦听的通知,但无论是否正在侦听UIApplicationWillResignActiveNotification,都要调用:
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification];
将导致自己停止收听该通知,或者如果自己没有收听该通知则不执行任何操作。
指定要停止收听的通知的名称是最佳做法,但由于您说这是将其置于dealloc中,因此执行此操作也是安全的:
[[NSNotificationCenter defaultCenter] removeObserver:someObserver];
答案 1 :(得分:1)
如果要检入dealloc方法,如果您的视图已注册为观察者以正确删除它 - 您不应该。您所需要做的就是:
[[NSNotificationCenter defaultCenter] removeObserver:myView]
它将删除您订阅的所有通知的观察者
答案 2 :(得分:0)
NSNotificationCenter
不支持这种开箱即用的功能。您对KVO也有同样的问题。
通常只会跟踪一个对象是否已使用布尔属性进行了注册,并且只有在设置了此布尔值时才会取消注册。