Objective-C學習筆記之SEL和@selector

Objective-C學習筆記之SEL和@selector

@selector相當於函數指針,能返回SEL類型的值。
-(BOOL) isKindOfClass: classObj 用來判斷是否是某個類或其子類的實例
·-(BOOL) isMemberOfClass: classObj 用來判斷是否是某個類的實例
·-(BOOL) respondsToSelector: selector 用來判斷是否有以某個名字命名的方法(被封裝在一個selector的對象裏傳遞)
·+(BOOL) instancesRespondToSelector: selector 用來判斷實例是否有以某個名字命名的方法. 和上面一個不同之處在於, 前面這個方法可以用在實例和類上,而此方法只能用在類上.
·-(id) performSelector: selector 執行某個方法
Objective-C在編譯的時候,會根據方法的名字(包括參數序列),生成一個用 來區分這個方法的唯一的一個ID,這個ID就是SEL類型的

1     SEL 變量名 = @selector(方法名字);
2     SEL 變量名 = NSSelectorFromString(方法名字的字符串);
3     NSString *變量名 = NSStringFromSelector(SEL參數);

[對象 performSelector:SEL變量 withObject:參數1 withObject:參數2];

這樣的機制大大的增加了我們的程序的靈活性,我們可以通過給一個方法傳遞SEL參數,讓這個方法動態的執行某一個方法;我們也可以通過配置文件指定需要執行的方法,程序讀取配置文件之後把方法的字符串翻譯成爲SEL變量然後給相應的對象發送這個消息。

  從效率的角度上來說,執行的時候不是通過方法名字而是方法ID也就是一個整數來查找方法,由於整數的查找和匹配比字符串要快得多,所以這樣可以在某種程度上提高執行的效率。

發佈了25 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章