ios學習路線

2021-07-03 02:14:40 字數 1899 閱讀 3027



sel在objective-c中,sel是選擇器(selector)的乙個型別。選擇器就是指向方法的乙個指標,讀者可以簡單理解為程式執行到這裡就會執行指定的方法,可以這樣定義乙個選擇器:

sel action = [button action]; 

我們這樣使用乙個選擇器,下面的選擇器都叫做action:

[foo action]  

[bar action] 

在target-action 模式(cocoa 程式中的一種常用模式)中:target 指定了乙個類,action指定乙個方法。在乙個物件上設定action就是通過選擇器完成的:

-(void)settarget:(id)target;  

-(void)setaction:(sel)action; 

下述語句設定了乙個button物件上的action為「@selector(start:)」,即它呼叫start方法:

[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 performselector:sel withobject:nil]; 

這時候,系統就會自動呼叫classa物件的print方法,最終得到程式執行結果。

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...