1. 程式人生 > >【iOS開發】SEL和Selector 原理小結

【iOS開發】SEL和Selector 原理小結

一 、Selector(選擇器)簡介

選擇器是用來選擇一個方法來為一個物件 執行的名稱,或是在編譯原始碼時替換該名稱的 唯一識別符號的名稱。一個選擇器本身不做任何事情。它簡單地識別了一種方法。唯一使選擇器的方法名稱不同於普通字串,編譯器確保選擇器是獨特的。使一個選擇器有用的是(在執行時)它就像一個 動態函式指標,對於一個給定的名稱,自動指向一個方法的實現,適用於任何一個它所使用的類。

假設你有一個run方法選擇器和類Dog、Student。選擇器可以使用每一個類的一個例項來呼叫它的執行方法,即使每個類的實現可能是不同的。

二、獲取一個Selector

編譯的選擇器的型別是SEL。有兩種常見的方法來獲得選擇器:

(1)編譯時,通過編譯器指令 @selector 來獲取.

SEL aSelector = @selector(methodName);

(2)執行時,通過字串來獲取一個方法名 NSSelectorFromString

SEL aSelector = NSSelectorFromString(@”methodName”);

三、使用Selector

使用已經建立好的Selector。你可以通過 performSelector : 來呼叫某個方法。

// 建立一個run方法選擇器
SEL aSelector = @selector(run);

// 通過 performSelector: 來呼叫物件的 run 方法
[aDog performSelector:aSelector];
[anStudent performSelector:aSelector];

注:一般在特殊的情況下才會自己建立選擇器,比如當你要將某個按鈕的點選事件暴露給外面的類來實現其點選方法的時候,- (void)addTarget:(id)target action:(SEL)action;,這時候就會用到@Selector。