5

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

我并没有尝试避免多次添加通知。这是对我正在尝试做的事情的更多解释。

我有自定义网格视图。我可以在启用缩放或禁用缩放的情况下对其进行初始化。如果启用了缩放的初始化,我将自己添加为 UIApplicationWillResignActiveNotification 的观察者,但如果它的初始化禁用了缩放,那么它不会将自己添加为该通知的观察者。现在,在 dealloc 中,我想删除该 gridView 作为该通知的观察者。所以我想知道是否有办法找出 gridView 是否正在收听该通知。

4

3 回答 3

3

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

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification];

将导致 self 停止监听该通知,或者如果 self 没有监听它,则什么也不做。

指定您要停止侦听的通知的名称是最佳做法,但既然您说您将其放在 dealloc 中,那么这样做也是安全的:

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];
于 2015-06-17T16:06:19.413 回答
1

If you want to check in dealloc method, if your view is registered as observer to correctly remove it - you should not. All you need to do is:

[[NSNotificationCenter defaultCenter] removeObserver:myView]

and it will remove observers for all notifications you subscribed

于 2013-10-17T20:26:45.887 回答
0

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

通常,人们只使用布尔属性跟踪对象是否已注册,并且仅在设置了该布尔属性时才取消注册。

于 2015-06-17T16:17:29.797 回答