iOS協議--CS193P課程筆記(1),

來源:互聯網
上載者:User

iOS協議--CS193P課程筆記(1),

一.  引入protocal與delegate概念的目的

      由於“id”類型的使用,無法通過id,獲得真正想傳遞或接收的資料類型(雖然可通過id的自省機制,在運行時詢問)。 因此我們在代碼中說明,想要這個id類型的對象實現哪些方法(文法上的定義,有無protocal,編譯器產生的程式碼是無區別的)。

      id < Protocal > obj 

    聲明對象obj,是一個id類型的對象,並滿足某條件(Protocal)。

     id < Protocal > obj =[ [MyClass alloc ]init ]

    MyClass  承諾實現Protocal中的方法。

 

二. iOS中protocal的應用

    1 delegate 和dataSourse

        一個iOS中得對象,想完成某些重要的功能,和不屬於類方法的方法,則它會把這些事件的操作代理出去,由它的代理完成。為了達到對上述的目的,在此對象中聲明一個滿足一系列方法(protocal)的屬性,代表其代理。

         1.1 可用於對子類中實現不屬於類方法的方法(This is an alternative to subclassing to provide non-generic behavior)

        舉例:

 1  // NetWorkManager.h 2  @protocol NetworkDelegate 3  @required 4  - (void)task:(NetWorkFlag)tag didSuccess:(NSDictionary *)result withInfo:(NSString *)infoString;  //成功回調 5  - (void)task:(NetWorkFlag)tag didFailed:(NSString *)failedReason;  //失敗回調 6  @optional 7  - (void)setProgress:(float)newProgress; 8  @end 9  @interface NetWorkManager : NSObject<ASIHTTPRequestDelegate>10  @property (nonatomic, weak) id<NetworkDelegate> networkDelegate;11  .....//其他類介面

        上述代碼說明, NetWorkManager將其 didSuccess 與 didFailed 方法代理出去,由其代理 id<NetworkDelegate> networkDelegate實現。其中networkDelegate可以是任何類型(id)的對象,其承諾實現 @protocol NetworkDelegate。

1  //GetOrderController.h2  @interface GetOrderViewController : TTBaseViewController <UITableViewDelegate,UITableViewDataSource,UIAlertViewDelegate,NetworkDelegate> 
1 // GetOrderController.m2 3 [self.networkManager setNetworkDelegate:self];

 

     1.2 在對象(MVC)直接進行盲通訊

   舉例:View無法擁有自己的資料,需要不斷詢問別的對象,進行通訊。而View不想與某一特定類型的對象綁定,所以該通訊對象最好是一個id(不可見)。

   GetOrderController中有tableView屬性,用於展示列表資訊,即GetOrderController承諾實現dataSourse協議中得方法。此種情況下,tableView與GetOrderController的通訊(controller與view)即盲通訊(blind)。通訊內容在此處為 count和dataAt兩類。

 

 

 

       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.