在開發過程中,頁面間的通信是避免不了的,剛開始學習的時候總是用的不夠熟練,用過這么久后,來整理一下這幾種方式。
1、直接傳值:
這種方式應該是用的最多的,當從頁面A跳轉到頁面B時,頁面B需要用到A的一些數據,這時候就可以在頁面B定義一個屬性,將這個值直接帶過來,比如:從列表頁跳轉到詳情頁的時候,詳情頁需要根據id獲取商品詳情,這時候就可以使用直接傳值的方式。使用這種方式,得保證B先實例化,再賦值!!
還可能會遇到一種情況,就是在A頁面跳轉的時候不是直接alloc的一個Controller,這時候可以根據頁面間的關系去找到需要的指針,比如用parentViewController。
2、代理(delegate)
這個也是初學的時候會用的比較多的一種方法。聲明協議,成為代理,實現代理函數即可。調用代理方法的時候,最好使用responsesToSelecter方法判斷一下代理是否響應這個方法,避免崩潰。比如:自定義了一個View,點擊里面的Button的時候需要告訴頁面刷新,這個時候就可以在View里面聲明一個協議,當點擊的時候調用協議方法,就能告訴頁面。
3、block
block是代碼塊,剛開始使用的時候會有一點難理解,不過用熟練了之后會覺得這是個很好用的東西啊。
可以直接聲明一個block:
@property (copy,nonatomic) void(^chooseItemBlock)(NSInteger param);
調用:
if (self.chooseItemBlock) {
self.chooseItemBlock(sender.tag-100);
}
也可以用來實現回調
4、通知
又稱廣播,顧名思義,任何對象都可以收到這個消息,前提是注冊為這個廣播的接收者,這種方法看似方便,但是管理起來很容易出錯,形象化一些就是當你頻繁的使用廣播的時候,就能看到滿天的消息在飛,注冊為接收者的必須移除,如果出現內存泄露問題,就有可能注冊兩次,所以還是盡量避免使用廣播。不過有一點是使用通知可以監聽到系統級的變化,比如進入前臺,被kill。。。
暫時只想到這幾種,也是最常用的幾種了 ,以后再來補充