2010-06-11 82 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

相关问题