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

sto*_*one 9 cocoa objective-c

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

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

就像我们一样

Car * mazda = [[Car alloc] init];
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*oft 11

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

  • 当你在谈论一个真正的"汽车"(或你正在处理的任何课程)时,你不需要一个`*`.当你指的是一个**指针**到一个'Car`(就像在这种情况下),你这样做. (2认同)

nil*_*ils 6

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

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

int number = 42;
Run Code Online (Sandbox Code Playgroud)