美文网首页
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与野指针

    让程序访问野指针 如果这样声明两个属性: 然后调用以下方法: 运行后层序会crash掉,因为self.arr2访问...

  • __weak & __unsafe_unretained

    __unsafe_unretained:不会对对象进行retain,当对象销毁时,会依然指向之前的内存空间(野指针...

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 关于引用指针引用的若干问题 2018-06-15

    ARC 下默认指针是强引用:__strong &__weak &__unsafe_unretained的比较 参考...

  • 野指针与空指针

    空指针 没有存储任何内存地址的指针就称为空指针(NULL指针) 空指针就是被赋值为0的指针,在没有被具体初始化之前...

  • 空指针与野指针

    空指针:没有存储任何内存地址的指针被称为空指针(也就是NULL指针)。在没有被初始化之前,其值为0.比如:Stud...

  • 野指针与空指针

    1.空指针 没有存储任何内存地址的指针就是空指针(null指针) 空指针就是被赋值为nil的指针,在没有被初始化之...

  • 空指针与野指针

    注意空指针和野指针的区别:空指针是指向null的指针,没有指任何内存地址。而野指针是,指向了一块内存地址,但是这块...

  • 空指针、野指针与悬垂指针

    空指针:指针指向的地址为空的指针叫空指针(NULL指针) 野指针:是指向“垃圾”内存(不可用内存)的指针产生原因:...

  • 空指针 野指针与悬垂指针

    一:空指针 指针指向的地址为空的指针叫空指针(NULL指针) 二:野指针 是指向“垃圾”内存(不可用内存)的指针产...

网友评论

      本文标题:unsafe_unretained与野指针

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