2010-05-25 33 views
2

我剛開始使用Objective-C,我想了解以下幾行代碼的意思,因爲我在Objective-C隨處可見,但我不太得到它100%:有人可以向我解釋什麼(NSString *)與Obj-C意味着什麼?

- (id)initWithName:(NSString *)name; 

我明白上面的這行是一個傳遞一個參數的實例方法,我不明白的是(NSString *)名稱。

另一個例子是:

-(NSString *)name; 

person.height = (NSObject *)something; 

感謝您的幫助

回答

2

相當於在該行:

- (id)initWithName:(NSString *)name; 

(NSString *)僅僅是參數的類型 - 一個字符串對象,它是Cocoa中的NSString類。在Objective-C中,您總是處理對象引用(指針),所以「*」表示參數是對對象的引用。

在這個例子中:

person.height = (NSObject *)something; 

的東西有點不同的正在發生的事情:(NSObject *)再次指定類型,但是這一次它是一個「類型轉換」的操作 - 這是什麼意思是取「的東西「對象引用(可能是NSString,NSNumber或...)並將其視爲對NSObject的引用。


更新 - 在談到Objective-C對象(而不是原始的類型,如整數或浮點數),一切都少不了一個指針,以便轉換操作的意思是「取這個指針的X,並把它當作如果它指向一個Y「。舉例來說,如果你有一個容器類(如NSArray)持有通用NSObject S,但你知道的對象實際上是字符串,你可能會說:

NSString *myString = (NSString *)[myArray objectAtIndex:0]; 

,這意味着「從獲取的第一個對象數組,將其視爲字符串「。

該轉換實際上並沒有轉換該值,它只是對編譯器說的一種方式:「嘿,我知道我在這裏給X分配一個Y,所以不要給我一個警告」 。

+0

鑄造操作是否改變了數值類型?意思是,如果期待一個int,它會變成一個bool,這是正確的嗎? – 2010-05-25 14:38:24

4
- (id)initWithName:(NSString*)name; 

是採用所謂的name一個參數是一個指針的方法的簽名到NSString

-(NSString *)name; 

被稱爲name的訪問方法,返回指針NSString

person.height = (NSObject *)something; 

類型轉換somethingNSObject指針,然後它被分配給person.height屬性。

看看Learning Objective-C: A Primer

0
- (id)initWithName:(NSString *)name; 
    ----------------------------------------- 
    '-' means its an instance method (+ is used for static methods) 
    '(id)' is the return type  
    'initWithName' is the function name, the name implies its a constructor 
    ':' start of parameter 
    '(NSString*)' parameter type 
    'name' parameter name 

更多解釋其的

(id)initWithName(NSString* name) 
0
(NSString *)name 

是說,一個可變name是一個指針*到的NSString對象。它是一個指針,因爲name變量不是字符串,而是它只是該字符串的內存地址。

+0

這是否意味着我可以訪問NSString類的所有方法和屬性?讓我們假設NSString類有一個名爲doS​​omething的方法,然後可以做[name doSomething]? – 2010-05-25 14:35:32

+0

是的,你可以。這是具有對象的整個觀點。 – jamone 2010-05-25 14:59:59

+0

只是爲了確保。所以如果我有 - (id)initWithName:(NSString *)name;那麼在initWithName方法內我可以做[名字soSomething]? – 2010-05-25 15:14:41

相關問題