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

1.何为assign?

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

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

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

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

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

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

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,241评论 30 472
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 1,767评论 0 4
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,028评论 0 7
  • 假期第一天我和老公去了株洲的方舟学院。这个学院是以华德福教育理念为基础,学院座落在一个偏远的农业科技园里...
    云云习习阅读 316评论 5 0
  • 大家早上好!今天2月22日,星期四,农历正月初七。 无论过去发生过什么,你要相信,最好的尚未到来。即使生活给你一千...
    Kingofcool阅读 168评论 0 0