为什么用星号声明对象变量

时间:2010-12-15 19:30:32

标签: objective-c cocoa

这似乎是一个微不足道的问题。

但是为什么我们在声明对象变量时必须使用星号符号

就像我们做的那样

Car * mazda = [[Car alloc] init];

星号的重要性是什么,我的意思是编译器已经知道它是一个对象,我确信编译器可以训练不要抱怨它。但是再次通过省略它,我收到一条错误消息“静态分配objective-c类NSObject的实例”这样做的目的是什么?

5 个答案:

答案 0 :(得分:11)

asterix是您声明的Car变量的限定符。这意味着你要声明一个指向Car的指针,而不是声明一个Car本身。 init函数的返回值(以及该函数的alloc函数)是指向Car的指针,而不是Car本身,因此这是正确的。

答案 1 :(得分:6)

使用*声明指针。这就像在C中,它是ObjC的一个子集。如果没有*,则静态分配变量,这对于ObjC对象是不可能的(因为在编译时无法确定对象的大小)。

静态分配的变量用于原始C类型,如int或double

int number = 42;

答案 2 :(得分:4)

Objective-C要求动态分配所有对象(即在堆上)。您获得的错误表明您正在尝试在堆栈上创建Car对象。通过声明马自达是指向Car(Car *)而不是Car的指针,您可以满足该要求。

答案 3 :(得分:1)

这实际上是Why [object doSomething] and not [*object doSomething]?的欺骗,它有大量的背景信息。

答案 4 :(得分:0)

变量声明中的asterix也意味着变量的值不具有静态分配值。它的指针就像其他人说的一样。