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

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

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容