美文网首页
unsafe_unretained与野指针

unsafe_unretained与野指针

作者: alige | 来源:发表于2017-03-08 11:39 被阅读33次

    让程序访问野指针

    如果这样声明两个属性:

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

    相关文章

      网友评论

          本文标题:unsafe_unretained与野指针

          本文链接:https://www.haomeiwen.com/subject/gslbgttx.html