iOS中通知的添加和移除

  咱們都知道viewWillAppear:方法是在控制器的view將要顯示的時候調用的,而viewWillDisappear:方法是在控制器的view將要隱藏的時候調用。不少時候咱們根據自身須要將相關代碼邏輯添加到這兩個方法中。app

  如今隨着手勢操做的流行,不少人在頁面中添加了左滑返回的功能,可是咱們仍是習慣性的把通知的移除放在了viewWillDisappear中,這樣就會出現一個問題,若是我左滑滑到一半又滑回去了,這時候頁面的通知已經移除了,總體的功能就會受到影響。指針

  解決方法:io

    一、將註冊通知的方法放到viewDidLoad中;只要頁面有變化就會調用這個方法,頁面的通知監聽就會一直存在。方法

    二、將移除通知的代碼放到dealloc方法中,dealloc方法是在控制器銷燬之時調用的。這個時候移除通知而不是在viewWillDisappear:方法中移除能夠有效避免上述的問題。既然控制器都銷燬了,那麼還留着相關的通知幹嗎?該移除的移除。總結

 

  上面的兩種解決方案,要說哪一種最優,那確定非第二種莫屬了。view

   在這裏能夠舉個例子。假如咱們如今有這麼個場景:在控制器的view上有個label,在label上添加一個手勢(通常手勢都是在建立完label以後添加的),假設我在viewWillDisappear:方法中移除該手勢,則此時用戶側滑返回之時又取消側滑返回,那麼原先在label上的手勢卻再也添加不回來了(這裏label通常在viewDidLoad方法中建立),由於viewDidLoad方法不會再次調用。而第二種方法卻能夠有效避免這種狀況,這樣就能夠避免我這種「手賤」的任意搗鼓了,是否是很完美呢?vi

   注意項:解決方案

    用 [NSNotificationCenter defaultCenter] 發出的通知在控制器裏面接收不用理會,控制器銷燬的時候會自動釋放不會野指針,可是在view裏面接收通知的時候要在dealloc裏面移除,不然會野指針。習慣

  

  總結:ab

  一、iOS7新增長了導航控制器側滑手勢,當觸發側滑返回時,會調用系統的viewWillDisappear:方法,取消側滑返回時又會調用viewWillAppear:方法。

 

  二、在作手勢和通知等一系列操做之時儘可能在dealloc方法中執行,添加通知儘可能在viewDidLoad等一次性方法中執行。

 

  三、在viewWillAppear:、viewWillDisappear:、viewDidAppear:、viewDidDisappear:等相似於這種會屢次調用的系統方法中添加代碼時,必定要多考慮業務邏輯,以避免出現沒必要要的麻煩。

相關文章
相關標籤/搜索