//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄
一、概念
? ?1.SEL類型是OC中用來定義方法的關(guān)鍵字啡专,和其他語言不同的是SEL類型雖然是方法定義,但卻不從屬于任何類實例制圈,其值是通過@selector進行計算们童,可以把它當(dāng)做一個函數(shù)指針來使用畔况,當(dāng)然它實際上并不是一個函數(shù)指針,而是const?char*慧库。
? ?2.SEL類型可以在編譯時通過@selector()直接創(chuàng)建跷跪,也可以用NSSelectorString()函數(shù)創(chuàng)建,這個函數(shù)允許你通過名字調(diào)用方法齐板。
? ?例如:
[object performSelector:@selector(doSomething)]];
? ? ?它和如下代碼等價:[object doSomething];
? ?3.各種語言都有傳遞函數(shù)的方法:C語言使用函數(shù)指針吵瞻,C++中有函數(shù)引用,OC使用選擇器selector和block甘磨。
二听皿、方法的存儲位置
? ?@interface?Person:NSObject
+ (void)test1;
- ? ?(void?)test2;
? ?@end
? ?Person *person = [[Person alloc]init];
?在內(nèi)存中如下:
? ? 2.在內(nèi)存中每個類的方法都存儲在類對象中宽档,
每個方法都有一個與之對應(yīng)的SEL類型的數(shù)據(jù),
根據(jù)一個SEL數(shù)據(jù)就可以找到對應(yīng)的方法地址庵朝,進而調(diào)用方法吗冤。
? ? ?SEL類型的定義:typedef?struct?objc_selector *SEL.
? ? ?*************************
? ? ?SEL對象的創(chuàng)建
? ? ?SEL?s1 ?=?@selector(test1);
? ? ?SEL?s2 = NSSelectorFromString(@“test1”)
?注意:SEL就是對方法的一種包裝九府。