2012-02-09 22 views
0

你們可以幫助我瞭解一個概念真正的快,我無法理解從C到目標-C的轉換:Objective C的實例方法幫助*初級*

如果我有這樣的期待特定的實例方法像這樣:

-(void)addOwnerNamesObject:(NSString *)n; 
{ 
    // ownerNames defined as NSMutableSet 
    [ownerNames addObject:n]; 
} 

我明白了一些東西......

  1. 這是一個實例方法可以被程序調用。
  2. 在C,這將不返回任何東西(只是在花括號執行代碼)
  3. 在C,語法稍有減少混亂 - (void)InstanceMethod(Char *nameOfArgument)

這裏就是我需要幫助:

  1. 當你調用這個方法時你還在發送一個參數嗎?
  2. 如果是這樣,那麼參數NSString實例的方法名稱爲n

最後...題外話

如果你有一個方法...

-(id)someMethod:(NSString *)pn 
{ 
} 
  1. 什麼是(ID)爲?它是否告訴編譯器它可以返回任何類型的對象?

感謝您的幫助新手......非常感謝。

+0

是的,當你調用該方法時,你正在向實例發送一條消息,而且它獲得了一個名爲n的變量的參數。至於id問題,這是正確的,一個id可以是任何對象。當你不知道你會得到什麼對象時使用它。 – Nerdtron 2012-02-09 15:43:23

回答

1

你已經知道你在說什麼。

1.)當你調用這個方法時,你還在發送一個參數嗎?

是,無論是

添加多個冒號將其他參數傳遞冒號後...

-(void)addOwnerNamesObject:(NSString *)n withSomeIntYouWantToPass:(int)value;

2)如果是這樣,這樣的說法一個NSString實例該方法名稱'n'?

3)什麼是(ID)爲?這是否告訴編譯器它可以返回任何類型的對象?

是的,你會返回一個NSObject或NSObject的

5

首先,你應該真的看看basic Objective-C documentation

在Objective-C中,一種方法可以在+-符號之後。

+是用於類方法,例如-是方法。

然後你有返回類型,括號內和方法名稱。

- (int)foo; 

實例方法命名爲foo,返回一個int

類似的C函數是:

int foo(void); 

在Objective-C,該方法的名稱有點特殊,當你有爭論。

例如:

- (int)foo: (double)num; 

foo:命名的成員方法,返回一個int並採取命名num一個double參數。

類似的C函數:

int foo(double num); 
使用多個參數

目前:

- (int)foo: (double)num1 bar: (float)num2; 

名爲foo:bar:成員方法,返回一個int並採取命名num1一個double參數,並命名爲num2一個float參數。

類似的C函數:

int foo(double num1, float num2); 

關於id你的問題,它只是在方法的返回類型。

id是一個用於Objective-C實例的typedef。
基本上,這是一個void *

id確實表示任何類的Objective-C對象指針。

1

首先方法名稱中的破折號( - )表示這是一個實例方法,這意味着您需要一個實例來發送此消息。該調用看起來像這樣:

NSString * s = @「a string」; [someInstance addOwnersNameObject:s];

在這種情況下,您將NSString實例s傳遞給addOwnersNameObject消息。

ID就像無效*在C.

1

的子類添加到已與id進一步討論,給出的非常有效的答案:在Objective-C

對象是無類型,這意味着在基本層面上,您不需要知道能夠與對象交談的類型。這是Objective-C與C++之間的巨大差異之一。

指向對象的指針通常是輸入的,例如NSString *,以使代碼更具可讀性,並向編譯器指示您的意圖,以便在出現奇怪的情況時提供適當的警告。

id是指向對象的無類型指針。任何對象類型都可以作爲id傳遞,並且可以將任何id值分配給任何對象指針而不用轉換。時間

99.99%,id可以用NSObject *因爲對象的99.99%,來自NSObject繼承,這意味着你可以使用繼承的事實,而不是無類型對象的事實,以繞過一般的東西所取代。然而,NSObject在作爲對象和協議方面有點特殊,並且一些對象實際上並不是NSObject - NSProxy的子類,並且立即想起表示塊的類。你很少會對這些特殊情況特別感興趣,但id仍然經常用作約定,因爲人們更喜歡傳遞沒有指示其類型的對象的語義,以傳遞具有已知祖先的對象。

+0

+1非常好的精度。 – Macmade 2012-02-09 16:03:08