iOS中assign为什么不能修饰对象

assign常常用来修饰基本数据类型而对象类型则使用weak来修饰的原因:

1.对象开辟的空间是在堆空间,销毁和创建都由程序员手动去完成。

2.指针开辟的空间是在栈上,由系统去销毁。

3.使用assign修饰,当对象销毁时并不会将指针置为nil。

4.所以当堆空间的对象销毁时指向对象的指针仍然存在,会造成野指针,当访问该对象时会crash报错EXC_BAD_ACCESS。

5.因为基本数据类型的空间开辟也在栈空间,同样由系统进行销毁,所以不存在野指针的情况。

6.使用weak修饰对象时当对象销毁时指针也会被置为nil,所以用weak不会造成野指针。

你可能感兴趣的:(iOS中assign为什么不能修饰对象)