iOS 為什么delegate是nil

Snip20160923_5.png

一般情況下, 會專門寫一個public的protocol, 比如上圖中的1.

1定義的協議中的方法一般加上 @optional 必須實現的話就需要加@request

2和3中想要用protocol, 首先要導入1的頭文件.


以逆向傳值為例子, 2控制器中以push的方式進入3控制器, 這個里面實現protocol的方法.


在3委托類中調用代理

if( [self.delegate respondsToSelector:@selector(協議的方法)] ){
    [self.delegate 協議的方法];
}

此時, 觸發協議的方法, 回調到2VC里面, 因為協議方法的具體實現是在2VC里面.


如果這個時候 發現無法進入3中的if語句里面, 調試之后發現self.delegate = nil ; 想了好久才知道, 在2中進入的3控制器的時候, 需要3VC.delegate = self, 將3vc的代理設置為2VC, 就可以正常運行了.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iOS網絡架構討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,252評論 1 23
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,547評論 1 14
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,394評論 0 3
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,370評論 0 6