*符号
放左边一般表示声明一个指针,如:
Model *model = [[Model alloc] init];
*在等号左边,表示声明了一个Model类型的指针变量,指向了内存所在的地址.
若*符号在等号右边,则表示取该内存地址的值,理论上这样的写法应该是对的:
Model m = *model;
但编译器会报错:
Error:(29, 11) interface type cannot be statically allocated
大概意思是,不允许静态的初始化实例对象,你必须使用alloc init方式来初始化对象,但是你是可以断点查看*model的,它就是一个Model对象类型,和Model *类型不同,它后面不会带有地址,是个纯Model类型
&符号
表示取指针指向的值或者量,指针变量也是变量,它也有对应的地址,Model *model本质上model是指针类型变量,那么它本身也是需要分配内存地址的,为&model,也是指针,是Model*类型的指针,那么,它最终的类型为Model**,即指针的指针类型,且指针的指针地址分配在栈空间,即:
Model *model = [[Model alloc] init];
情况下,
model地址在堆,指向对象的内存地址
&model(Model**类型)地址在栈,为model指针变量本身的地址