首先我们需要明确,对象的内存一般被分配到 堆 上,基本数据类型和oc数据类型的内存一般被分配在 栈 上
如果用assign修饰对象,当对象被释放后,指针的地址还是存在的,也就是说指针并没有被置为nil,从而造成了野指针。因为对象是分配在堆上的,堆上的内存由程序员分配释放。而因为指针没有被置为nil,如果后续的内存分配中,刚好分配到了这块内存,就会造成崩溃
而assign修饰基本数据类型或oc数据类型,因为基本数据类型是分配在栈上的,由系统分配和释放,所以不会造成野指针
首先我们需要明确,对象的内存一般被分配到 堆 上,基本数据类型和oc数据类型的内存一般被分配在 栈 上
如果用assign修饰对象,当对象被释放后,指针的地址还是存在的,也就是说指针并没有被置为nil,从而造成了野指针。因为对象是分配在堆上的,堆上的内存由程序员分配释放。而因为指针没有被置为nil,如果后续的内存分配中,刚好分配到了这块内存,就会造成崩溃
而assign修饰基本数据类型或oc数据类型,因为基本数据类型是分配在栈上的,由系统分配和释放,所以不会造成野指针
本文标题:为什么assign不能用于修饰对象
本文链接:https://www.haomeiwen.com/subject/kwzpnctx.html
网友评论