unsafe_unretained与野指针

2017-03-08  本文已影响33人  alige

让程序访问野指针

如果这样声明两个属性:

    @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关键字。

上一篇下一篇

猜你喜欢

热点阅读