iOS中assign为什么不能修饰对象
2019-07-09 本文已影响0人
小小废柴萌
assign常常用来修饰基本数据类型而对象类型则使用weak来修饰的原因:
1.对象开辟的空间是在堆空间,销毁和创建都由程序员手动去完成。
2.指针开辟的空间是在栈上,由系统去销毁。
3.使用assign修饰,当对象销毁时并不会将指针置为nil。
4.所以当堆空间的对象销毁时指向对象的指针仍然存在,会造成野指针,当访问该对象时会crash报错EXC_BAD_ACCESS。
5.因为基本数据类型的空间开辟也在栈空间,同样由系统进行销毁,所以不存在野指针的情况。
6.使用weak修饰对象时当对象销毁时指针也会被置为nil,所以用weak不会造成野指针。