unsafe_unretained与野指针

让程序访问野指针

如果这样声明两个属性:

    @property (nonatomic, strong) NSArray*arr1;   
    @property (nonatomic, unsafe_unretained) NSArray*arr2;  

然后调用以下方法:

self.arr1= [@"23',@"234'];   
self.arr2= self.arr1;   
self.arr1= nil;  
NSLog(@"arr2 = %@", self.arr2);  

运行后层序会crash掉,因为self.arr2访问了野指针
为何会造成野指针呢?因为用unsafe_unretained声明的指针,由于self.arr1=nil已将内存释放掉了,但是self.arr2依然指向self.arr1的空间,然后该内存已经被释放了,所以是野指针。因而就造成crash. 所以尽量少用unsafe_unretained关键字。

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

推荐阅读更多精彩内容

  • 本文为转载: 作者:zyydeveloper 链接://www.greatytc.com/p/5f776a...
    Buddha_like阅读 937评论 0 2
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,241评论 30 472
  • 2、#import和#include的区别是什么?#import<> 跟 #import""有什么区别? .#im...
    AlanGe阅读 344评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,852评论 0 9
  • 许多人每天都在上演的三件事:晚上睡不着,早上起不来,后悔昨天睡太晚!一个人如果连早起都做不到,你还指望他这一天能做...
    黟县孙志宇阅读 267评论 0 0