Ios 有没有办法检查观察者是否侦听了一些通知?

Ios 有没有办法检查观察者是否侦听了一些通知?,ios,objective-c,nsnotificationcenter,nsnotifications,nsnotification,Ios,Objective C,Nsnotificationcenter,Nsnotifications,Nsnotification,我想检查我的视图是否正在侦听UIApplicationWillResignActiveNotification。如果它正在侦听,则我希望在解除锁定期间删除它。现在我想知道是否有办法使用objective c实现这一点 我并没有试图避免为通知添加多个内容。下面是我试图做的更多解释 我有自定义的gridView。我可以在启用缩放或禁用缩放的情况下对其进行初始化。如果启用了缩放的init将自身添加为UIApplicationWillResignActiveNotification的观察者,但如果禁用了

我想检查我的视图是否正在侦听UIApplicationWillResignActiveNotification。如果它正在侦听,则我希望在解除锁定期间删除它。现在我想知道是否有办法使用objective c实现这一点

我并没有试图避免为通知添加多个内容。下面是我试图做的更多解释


我有自定义的gridView。我可以在启用缩放或禁用缩放的情况下对其进行初始化。如果启用了缩放的init将自身添加为UIApplicationWillResignActiveNotification的观察者,但如果禁用了缩放的init,则不会将自身添加为该通知的观察者。现在,在dealloc中,我想将gridView作为该通知的观察者删除。所以我想知道是否有办法确定gridView是否正在侦听该通知

如果您想签入dealloc方法,如果您的视图已注册为观察者以正确删除它,则不应该签入dealloc方法。您需要做的只是:

[[NSNotificationCenter defaultCenter] removeObserver:myView]

它将删除您订阅的所有通知的观察者

我不知道有什么方法可以检查您的观察者正在侦听哪些通知,但无论它是否正在侦听UIApplicationWillResignActiveNotification,请调用:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification];
将导致self停止侦听该通知,或者如果self未侦听该通知,则不执行任何操作

指定要停止侦听的通知的名称是最佳做法,但由于您说过要将其放入dealloc,因此只需执行以下操作也是安全的:

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];

NSNotificationCenter
不支持开箱即用。KVO也有同样的问题


通常情况下,用户只需跟踪对象是否已使用布尔属性注册,并且仅在设置了该布尔属性时才会注销。

能否指定您要完成的任务?可能的重复项无法检查观察者是否已注册。是否更容易始终注册将您的视图注册为观察者,然后在通知操作中,您是否具有缩放的逻辑?这样你就会知道,你总是必须在DealLocal中注销,仅仅执行[[NSNotificationCenter defaultCenter]removeObserver:myView]不是一个好的编程实践。
NSNotificationCenter
更为宽容,因为你总是可以删除一个观察者,如果这个物体现在不是一个观察者,它也不会做任何事情。因此,您可以随时使用
NSNotificationCenter
安全地调用
removeObserver:
。但是,如果您试图删除KVO观察者,但目标没有观察到,则会出现异常。这意味着,您确实需要使用KVO跟踪您的观察状态,但不一定要使用
NSNotificationCenter
@DarkDust,因为您不必这样做并不意味着您不应该这样做。