Objective-C的非正式協議(Informal Protocol)和選擇器(Selector)

0x01 非正式協議

“非正式協議”(Informal Protocol)可以視爲“類別”的別稱,即凡是NSObject或其子類的類別,都是“非正式協議”。

 

可以從Apple官方的開發者文檔看到:

1、非正式協議中的方法是否實現是可選的,因此在調用非正式協議中的方法之前,需要去檢查對象類是否實現了它;

2、在Objective-C 2.0中引入可選的正式協議方法之前,非正式協議是Foundation和AppKit類實現委託的唯一方式。

 

0x02 響應選擇器

選擇器(Selector)只是一個方法名稱,但它以Objective-C運行時使用的特殊方式編碼,以快速執行查詢。 

可以使用@selector()編譯指令圓括號中的方法名稱來指定選擇器:

//The selector for the Car method setEngine:
@selector(setEngine:)
//The selector for the setTire:atIndex:
@selector(setTire:atIndex:)

NSObject提供了一個名爲respondsToSelector:的方法,該方法詢問對象以確定其是否能夠響應某個特定的消息:

Car *car = [[Car alloc] init];
if ([car respondsToSelector: @selector(setEngine:)])  //如果Car類對象存在setEngine:方法,則執行以下代碼
{
 NSLog (@"yowza!");
}

選擇器可以被傳遞,可以作爲方法的參數使用,甚至可以作爲實例變量被存儲。

利用這些特性,可以編寫一些非常強大和靈活的代碼!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章