2010-06-11 61 views
1

這裏是蘋果公司的文檔中的方法聲明中途: Learning Objective-C: A Primer爲什麼在這個方法聲明中沒有*?

- (void)insertObject:(id) anObject atIndex:(NSUInteger) index 

爲什麼沒有NSUInteger*權。我認爲所有對象都是指針類型,所有強類型指針必須有一個*之後的字符。

+0

不要混淆NSInteger/NSUInteger與NSNumber。 NSInteger(大致)等同於CFIndex/ssize_t,NSUInteger(大致)等於size_t。我不確定他們爲什麼不使用標準類型,但是你去了。 – 2010-06-11 18:34:21

回答

11

NSUInteger不是對象類型,它是typedefunsigned int

在這種情況下,你真的想要使用*的唯一原因是,如果你想獲得一個int的地址並存儲一些東西。 (有些圖書館會通過錯誤消息來做到這一點。一個例子:

-(void) methodName: (NSUInteger *) anInt { 
    *anInt = 5; 
} 

NSUInteger a; 
[obj methodName: &a]; //a is now 5 
+2

兩個錯誤:NSInteger/NSUInteger/CFindex是64位系統上的64位類型,因爲它們被用來表示像內存中長度/計數/偏移等東西。另外,你的意思是* anInt = 5. – 2010-06-11 18:33:25

+0

我認爲'NSUInteger * a'這一行是錯誤的,它應該沒有'*'。就目前而言,您最終得到了一個指針類型的局部變量(並且其值未指定),並在下面的行中對此局部變量應用'&'運算符,給出一個表達式,該表達式是指向一些東西。這與你的方法所期望的不同,即只是一個指針。 – harms 2010-07-18 11:13:34

+0

@harms,你是對的。它要麼將其定義爲一個指針並直接傳遞它,要麼通常使用'&'(address-of)運算符來定義它。 – 2010-07-18 11:22:47