有没有办法检查观察者是否听取了一些NSNotification?

时间:2013-10-17 20:11:10

标签: ios objective-c nsnotificationcenter nsnotifications nsnotification

我想检查一下我的观点是否正在收听UIApplicationWillResignActiveNotification。如果它正在监听,那么我想在dealloc期间删除它。现在我想知道是否有办法用目标c做到这一点?

我没有尝试避免多次添加通知。以下是对我要做的事情的更多解释。

我有自定义gridView。我可以通过启用扩展或禁用扩​​展来初始化它。如果启用了扩展的init,则将其自身添加为UIApplicationWillResignActiveNotification的观察者,但如果其init已禁用扩展,则它不会将自身添加为该通知的观察者。现在,在dealloc中我想删除该gridView作为该通知的观察者。所以我想知道是否有办法找出gridView是否正在收听该通知。

3 个答案:

答案 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也有同样的问题。

通常只会跟踪一个对象是否已使用布尔属性进行了注册,并且只有在设置了此布尔值时才会取消注册。