为什么assign不能用于修饰对象?

1.何为assign?

assign 是oc中定义对象属性property时用于修饰基本数据类型和oc数据类型的关键字。

2.为什么assign不能用于修饰对象?

首先我们需要明确,对象的内存一般被分配到堆上,基本数据类型和oc数据类型的内存一般被分配在栈上。

如果用assign修饰对象,当对象被释放后,指针的地址还是存在的,也就是说指针并没有被置为nil,从而造成了野指针。因为对象是分配在堆上的,堆上的内存由程序员分配释放。而因为指针没有被置为nil,如果后续的内存分配中,刚好分配到了这块内存,就会造成崩溃。

而assign修饰基本数据类型或oc数据类型,因为基本数据类型是分配在栈上的,由系统分配和释放,所以不会造成野指针。

参考链接:https://www.jianshu.com/p/b4b376a2aaf8

你可能感兴趣的:(为什么assign不能用于修饰对象?)