開源中國iOS用戶端學習 (三) 再看協議與委託

來源:互聯網
上載者:User

iOS裡委託與協議是很重要的一塊,如果理解不好很難區分協議與委託到底有什麼不一樣,這些東西在開發中是經常遇見的;

協議是類留給外部的一個介面函數的集合(一位高手用C++基類來解釋是,把介面做為參數,回調基類的函數時,運行時識別,調用了相應子類的成員函數);

委託是iOS一種設計模式,通過委託別的類,來調用協議裡的方法,相當於一個回調過程;

使用理解委託與協議步驟:

(1) 弄清楚誰委託誰,需要幹什嗎?

拿上一篇部落格下拉重新整理源碼案例分析,(在源碼工程中comment檔案夾裡)有MessageSystemView這樣一個類,該類用於使用者的資訊所用(比如誰給你留言,或者評論了你某一篇部落格),我們也需要重新整理擷取最新資訊,此處用到下拉重新整理第三方類庫EGORefreshTableHeaderView類委託MessageSystemView類來實現這個特性,這就需要在EGORefreshTableHeaderView類定義一個協議對象delegate。

(2)被委託類需要在interface中聲明<XXDelegate>,表示該類要實現協議裡的方法.

MessageSystemView實現EGORefreshTableHeaderView協議方法就要遵循EGORefreshTableHeaderDelegate協議.

(3)在被委託類裡定義一個委託類的對象,將xx.delegate=self,意思是把委託的對象只想被委派物件;

在EGORefreshTableHeaderView.h檔案中

EGORefreshTableHeaderView*_refreshHeaderView;

在ViewDidLoad中   view.delegate = self;     _refreshHeaderView = view;

- (void)viewDidLoad  {      allCount = 0;      [super viewDidLoad];                if (self.tabTitle) {          self.tabBarItem.title = self.tabTitle;      }                //載入固定資料      imageDownloadsInProgress = [NSMutableDictionary dictionary];      comments = [[NSMutableArray alloc] initWithCapacity:10];      [self reload:YES];                //添加的代碼      if (_refreshHeaderView == nil) {         <span style="color:#ff0000;"> EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, -320.0f, self.view.frame.size.width, 320)];          view.delegate = self;</span>          [self.tableComments addSubview:view];          <span style="color:#ff0000;">_refreshHeaderView = view;</span>      }      [_refreshHeaderView refreshLastUpdatedDate];                self.tableComments.backgroundColor = [UIColor colorWithRed:248.0/255.0 green:249.0/255.0 blue:249.0/255.0 alpha:1.0];  }

(4)在被委託類的實現檔案中調用協議方法,這就是實現委託方法的一個過程;

此處EGORefreshTableHeaderView類對象委託MessageSystemView類對象,在MessageSystemView實現對EGORefreshTableHeaderView類協議的調用;

MessageSystemView.m檔案實現委託方法

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view  {      [self reloadTableViewDataSource];      [self refresh];  }  - (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view  {      return _reloading;  }  - (NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view  {      return [NSDate date];  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.