ARC修饰符----__unsafe_unretained修饰符
来源:互联网 发布:软件测试计划的目的 编辑:程序博客网 时间:2024/06/07 03:33
__unsafe_unretained修饰符
__unsafe_unretained是不安全的所有权修饰符。尽管ARC式的内存管理是编译器的工作,但附有__unsafe_unretained修饰符的变量是不属于编译器的内存管理对象。
id __unsafe_unretained obj = [[NSObject alloc]init];
代码中将自己生成并持有的对象赋值给附有__unsafe_unretained修饰符的变量中。虽然使用了unsafe的变量,但是编译器并不会忽略,而是给出适当的警告。
附有__unsafe_unretained修饰符的变量通附有__weak修饰符的变量是一样的,因为自己生成并持有的对象不能继续为自己所有,所以生成的对象会立即被释放。(到这里__unsafe_unretained和__weak修饰符是一样的)。
id __unsafe_unretained obj1 = nil;{ id __strong obj0 = [[NSObject alloc]init]; //生成并持有对象。 obj1 = obj0;//虽然obj0变量赋值给obj,但是obj1变量既不持有对象的强引用也不持有弱引用 nslong(@"A: %@",obj1);//输出obj1变量表示的对象}/* 因为obj0变量超出其作用域,强引用失效; 所以自动释放自己持有的对象; 因为对象没有持有者,所以废弃该对象。*/nslong(@"B: %@",obj1);/*输出obj1变量表示的对象obj1变量表示的对象已经被废弃了(悬垂指针)错误访问!*/
执行结果为:
A:<NSObject: ox752312>B:<NSObject: ox752312>
也就是说,最后一个输出只是碰巧正常运行而已。虽然访问了已经被废弃的对象,但是应用程序在个别运行的状况下才会崩溃。
0 0
- ARC修饰符----__unsafe_unretained修饰符
- __strong、__weak、__unsafe_unretained和__autoreleasing修饰符
- iOS内存管理-所有权修饰符:__strong, __weak/__unsafe_unretained, __autoreleasing
- ARC所有权修饰符---__strong修饰符
- ARC所有权修饰符--__weak修饰符
- ARC(一) 所有权修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 网易实习生笔试编程题 二叉树
- 配置机房数据库
- RxJava入门——概念篇
- 百度移动统计的使用
- linux中动态库和静态库
- ARC修饰符----__unsafe_unretained修饰符
- JavaMail(2)邮件发送和接收
- 【数据结构与算法】复杂度度量与分析
- Java爬虫框架
- android拍照获得图片及获得图片后并裁剪
- Bitwise AND of Numbers Range
- 一个简单的观察者模式例子
- poj 1068
- ArrayList、Vector、HashMap、HashTable是如何扩容