sel在objective-c中,sel是選擇器(selector)的乙個型別。選擇器就是指向方法的乙個指標,讀者可以簡單理解為程式執行到這裡就會執行指定的方法,可以這樣定義乙個選擇器:
sel action = [button action];我們這樣使用乙個選擇器,下面的選擇器都叫做action:
[foo action]在target-action 模式(cocoa 程式中的一種常用模式)中:target 指定了乙個類,action指定乙個方法。在乙個物件上設定action就是通過選擇器完成的:[bar action]
-(void)settarget:(id)target;下述語句設定了乙個button物件上的action為「@selector(start:)」,即它呼叫start方法:-(void)setaction:(sel)action;
[button setaction:@selector(start:)];如果你的方法上有兩個引數,比如:
-(void)setname:(nsstring *)name age:(int)age;那麼,你的選擇器應該這樣書寫:
sel sel = @selector(setname:age:);如果方法不存在的話,呼叫該方法的應用可能會異常中止。所以,需要使用respondstoselector 方法來判斷該物件是否存在對應的方法,使用performselector:withobject:方法來呼叫選擇器:
sel sel = @selector (start:) ; // 指定action下面來看乙個應用選擇器的例項。if ([obj respondstoselector:sel])
【例2-16】選擇器例項。
#import <【程式結果】foundation/foundation.h>
@inte***ce classa : nsobject
- (void) print;
@end
@implementation classa
- (void) print
@end
int main (int argc, const char * argv)
i'm classa.下面解釋一下這段**,讀者有可能看不明白,因為到目前為止並沒有講述類相關的知識。讀者只需要了解上述例子中選擇器的用法即可,關於類的知識,會在後面的章節詳細闡述。
**首先建立了乙個名字叫classa 的類,它只包含乙個方法print。在隨後的實現檔案中,我們實現了這個方法:
- (void) print讀者不難看出,這個方法僅僅是列印到控制台上一句話。在接下來的main方法中,定義了乙個選擇器sel,它指向的是乙個名叫print 的方法。我們並不知道這個方法是哪個類的,因為具體的資訊是在執行期間系統自動幫我們判斷的。
sel sel = @selector (print) ;隨後構建了乙個物件(讀者不用拘泥於語法,我們會在後面的章節詳細闡述),並呼叫這個物件performselector:withobject:的方法。
classa *classa = [[classa alloc]init];這時候,系統就會自動呼叫classa物件的print方法,最終得到程式執行結果。[classa performselector:sel withobject:nil];
ios學習路線 Objective C MRC
reference count引用計數 cocoa採用了引用計數機制,每乙個物件有乙個關聯的整型retaincount用於記錄物件的使用情況。物件被引用時retaincount 1,外部環境結束物件的使用後retaincount 1,當 retaincount為0的時候,該物件被銷毀。objecti...
ios學習路線與計畫
非常感謝這張圖的作者,一張圖省了多少事,提高了多少效率,看這張圖ios的學習路線就基本知道了。另外再參考一下下面另一位前人的總結 1 第一點要求 能比較順暢的閱讀官方的文件 英語學習是個長期的過程,推薦一篇好文,具體教你如何學習和提高英語 老碼農教你學英語 2 學習官方的一些技術指南 這裡各種技術模...
ios學習路線 Objective C 深淺拷貝
非容器類物件 nsstring str origin string nsstring strcopy str copy nsmutablestring mstrcopy str mutablecopy nslog array1 p array1 nslog arraycopy1 p arraycop...