首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 代理模式解析:協議方法自動調用的前提條件與實現原理

     編輯:程式設計綜合問答

核心機制

iOS 代理模式三要素:

  1. 協議:定義方法簽名(@protocol UITableViewDelegate)。
  2. 遵守協議:類聲明 @interface MyVC : UIViewController 。
  3. 實現方法:在 .m 中實現協議方法(如 tableView:heightForRowAtIndexPath:)。

關鍵一步:設置代理對象

// 必須顯式設置,否則不會回調!
tableView.delegate = self;
tableView.dataSource = self;

系統內部持有 weak 引用,運行時通過 respondsToSelector: 判斷是否實現,再發送消息調用。

自動調用時機示例

組件代理方法觸發時機
UITableViewheightForRowAtIndexPath重載數據、滾動顯示新行時
UIScrollViewscrollViewDidScroll滾動過程中持續觸發
UITextFieldtextFieldShouldReturn用戶點擊鍵盤 Return 時

常見坑

  • 忘記 delegate = self → 方法不調用。
  • 代理對象被釋放(未持有) → 崩潰或不回調,注意 weak 生命週期。
  • 協議方法簽名拼寫錯誤 → respondsToSelector: 返回 NO,靜默失效。

現代替代:Combine / Closure

iOS 13+ 可用 Combine 框架或閉包回調替代傳統代理,減少樣板代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved