簡體   English   中英

有沒有辦法檢查觀察者是否聽取了一些NSNotification?

[英]Is there a way to check if observer listens to some NSNotification?

我想檢查一下我的觀點是否正在收聽UIApplicationWillResignActiveNotification。 如果它正在監聽,那么我想在dealloc期間刪除它。 現在我想知道是否有辦法用目標c做到這一點?

我沒有嘗試避免多次添加通知。 這里有更多關於我想做什么的解釋。

我有自定義gridView。 我可以通過啟用擴展或禁用擴​​展來初始化它。 如果啟用了擴展的init,則將其自身添加為UIApplicationWillResignActiveNotification的觀察者,但如果其init已禁用擴展,則它不會將自身添加為該通知的觀察者。 現在,在dealloc中我想刪除該gridView作為該通知的觀察者。 所以我想知道是否有辦法找出gridView是否正在收聽該通知。

我不知道有什么方法可以檢查你的觀察者正在聽什么通知,但不管它是否在監聽UIApplicationWillResignActiveNotification,都要調用:

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

會導致自己停止收聽該通知,或者如果自己沒有收聽通知則不做任何事情。

指定要停止偵聽的通知的名稱是最佳做法,但由於您說您將其置於dealloc中,因此執行此操作也是安全的:

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];

如果要檢入dealloc方法,如果您的視圖已注冊為觀察者以正確刪除它 - 您不應該。 你需要做的就是:

[[NSNotificationCenter defaultCenter] removeObserver:myView]

它將刪除您訂閱的所有通知的觀察者

NSNotificationCenter不支持這種開箱即用的功能。 您對KVO也有同樣的問題。

通常,只是跟蹤是否已使用布爾屬性注冊了對象,並且僅在已設置此布爾值時取消注冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM