這裏是蘋果公司的文檔中的方法聲明中途: Learning Objective-C: A Primer爲什麼在這個方法聲明中沒有*?
- (void)insertObject:(id) anObject atIndex:(NSUInteger) index
爲什麼沒有NSUInteger
後*
權。我認爲所有對象都是指針類型,所有強類型指針必須有一個*
之後的字符。
這裏是蘋果公司的文檔中的方法聲明中途: Learning Objective-C: A Primer爲什麼在這個方法聲明中沒有*?
- (void)insertObject:(id) anObject atIndex:(NSUInteger) index
爲什麼沒有NSUInteger
後*
權。我認爲所有對象都是指針類型,所有強類型指針必須有一個*
之後的字符。
NSUInteger
不是對象類型,它是typedef
到unsigned int
。
在這種情況下,你真的想要使用*
的唯一原因是,如果你想獲得一個int的地址並存儲一些東西。 (有些圖書館會通過錯誤消息來做到這一點。一個例子:
-(void) methodName: (NSUInteger *) anInt {
*anInt = 5;
}
NSUInteger a;
[obj methodName: &a]; //a is now 5
兩個錯誤:NSInteger/NSUInteger/CFindex是64位系統上的64位類型,因爲它們被用來表示像內存中長度/計數/偏移等東西。另外,你的意思是* anInt = 5. – 2010-06-11 18:33:25
我認爲'NSUInteger * a'這一行是錯誤的,它應該沒有'*'。就目前而言,您最終得到了一個指針類型的局部變量(並且其值未指定),並在下面的行中對此局部變量應用'&'運算符,給出一個表達式,該表達式是指向一些東西。這與你的方法所期望的不同,即只是一個指針。 – harms 2010-07-18 11:13:34
@harms,你是對的。它要麼將其定義爲一個指針並直接傳遞它,要麼通常使用'&'(address-of)運算符來定義它。 – 2010-07-18 11:22:47
不要混淆NSInteger/NSUInteger與NSNumber。 NSInteger(大致)等同於CFIndex/ssize_t,NSUInteger(大致)等於size_t。我不確定他們爲什麼不使用標準類型,但是你去了。 – 2010-06-11 18:34:21