[Don IOS筆記] 研究delegate和protocol

ios 委託代理模式delegate

 

之前過一遍obj-C基礎的時候,遇到delegate有點看不明白,就先放著了(因為我真不知道用這個delegate可以做什麼)。


首先,講一下,Delegate不是一個屬性或者方法,它是一種「設計模式」。

ios開發練習的時候發現非常頻繁的用到delegate,比如UITableView,就會需要創建一個實例,然後將其delegate屬性設為self.

如果沒有這個設定,後面創建的method都沒有反應….也不知道為甚麼教學要設定protocol然後設定這個delegate屬性。

google上可以找到很多delegate的講解,但是有很多delegate的例子似乎都沒有很好的說明delegate的用處。

注意:我剛開始學習IOS開發沒多久,也都在摸索,由於做記錄還有和別人講述的過程能夠幫助我整理思路,所以我做了這篇關於delegate設計模式的記錄,如果你google到這篇文章,建議跳過,我舉的例子很亂XD。


這邊用一個例子實現Delegate的應用:


實現功能:

  1. VC1點擊按鈕Button,將value傳送給ChangeText這個Object
  2. ChangeText將value做了改變,回傳給VC1
  3. VC1將改變後的Value顯示在Label上。

接下來會創建三個檔案:

1、一個Protocol  用於規定要實現哪些方法的協議。
2、一個UIViewController  用於展現委託的結果。
3、一個NSObject 用於實現被委託方法。


Protocol的代碼:

代碼解釋:
protocol規定一定要實現DidChangedText方法


NSObject.h的代碼(ChangeText.h):

代碼解釋:

  1. 設置了用於改變值的方法shouldChangeText
  2. id<passTextDelegate>delegate,表示設置NSObject的Delegate的對象需要實現<passTextDelegate>中規定的方法

UIViewController.h的代碼(VC1.h):

代碼解釋:
1、<passTextDelegate>設置protocol,規定一定要實現的方法,這有個好處,比如UITableView有3個一定要實現的方法,不然tableView出不來,這個可以防止你忘記實現方法造成Crash
2、UILabel是為了方便我改變他的值,

NSObject.m的部分(ChangeText.m)

代碼解釋:
UIViewController會執行[changeText shouldChangeText]方法,這裡收到以後會將改變的值傳送到實現DidChangeText的類。

UIViewController.m主要實現代碼(VC1.m)

代碼解釋:
1、_initVC是我用來初始化的部分,初始化了UIViewController的view。並在baseView上加上了label和button。
2、btn點下後,實例化ChangeText這個NSObject類,將delegate設定為自己(UIViewController),執行ChangeText裡的shouldChangeText方法。


以上只是初學時玩看看protocol+delegate的紀錄,關於Delegate的概念請參考底下網友提供的資料:D

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *