ARC所有权修饰符---__strong修饰符
来源:互联网 发布:打印机服务器软件 编辑:程序博客网 时间:2024/06/15 21:06
ARC所有权修饰符
Objective-C编程中为了处理对象,可能将变量类型定义为id类型或者各种对象类型。所谓的对象类型就是指向NSObject这样的Objective-c类的指针,例如:“NSbject *”。id类型用于隐藏对象类型的类名部分,相当于C语言中的void*ARC有效时,id类型和对象类型同C语言的其他类型不同,它的类型上必须附加上所有权修饰符,所有权修饰符一共有4种。
- __strong修饰符
- __weak修饰符
- __unsafe_unretained修饰符
- __autoreleasing修饰符
__strong修饰符
__strong修饰符是id类型和对象类型默认的所有权修饰符,也就是说,
id obj = [[nsobject alloc]init];id __strong obj= [[nsobject alloc]init];
ARC无效时:
{
id obj = [[nsobject alloc]init];
[obj release];
}
为了释放生成并持有的对象,增加了release方法, 等同于ARC下的代码。
附有__strong修饰符变量的obj在超出其变量作用域时,即会在该变量被废弃时,会释放其被赋予的对象。__strong修饰符表示对对象强引用。持有强引用的变量在超出其作用域时被废弃,随着强引用的实效,引用的对象也会随之释放。id __strong obj0= [[nsobject alloc]init];//对象A//obj0 持有对象A的强引用id __strong obj1= [[nsobject alloc]init];//对象B//obj1 持有对象B的强引用id __strong obj2 = nil;//obj2 不持有任何对象obj0 = obj1;//obj0持有由obj1赋值的对象B的强引用,因为obj0被赋值,所以原先持有的对对象A的强引用实效。对象A的所有者不存在,因此废弃对象A。此时,持有对象B的强引用的变量为 obj0,obj1。obj2 = obj0;//obj2持有由obj0赋值的对象B的强引用。/此时,持有对象B的强引用的变量为obj0,obj1,obj2.obj1 = nil;//因为nil被赋予obj1,所以对对象B的强引用失效。 此时,持有对象B的强引用的变量为obj0和obj2。obj0 = nil;//因为nil被赋予obj0,所以对对象B的强引用失效。 此时,持有对象B的强引用的变量为obj2。obj2 = nil;//因为nil被赋予obj2,所以对对象B的强引用失效。 对象B的所有者不存在,因此废弃对象B.
0 0
- ARC所有权修饰符---__strong修饰符
- ARC(一) 所有权修饰符
- ARC所有权修饰符--__weak修饰符
- iOS内存管理-所有权修饰符:__strong, __weak/__unsafe_unretained, __autoreleasing
- __strong、__weak、__unsafe_unretained和__autoreleasing修饰符
- ARC修饰符----__unsafe_unretained修饰符
- iOS学习笔记(8)——ARC与所有权修饰符——strong,weak和autorelease
- block 使用__weak 和__strong修饰符问题
- block 中使用__weak 和__strong修饰符的问题
- block 中使用__weak 和__strong修饰符的问题
- iOS学习之——所有权修饰符
- __strong 修饰符内存分析及循环引用带来的内存泄露
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- 修饰符
- E - 4 Values whose Sum is 0
- 【codeup 1934】找x
- 15.行属性标签在包裹文字使用时,不需要设置宽高
- iOS 瀑布流基本实现
- XML pull解析
- ARC所有权修饰符---__strong修饰符
- OpenCV使用FileStorage保存Mat数据
- spring2.5.6在jdk1.8环境下运行的问题
- 设计模式之状态模式——随遇而安
- MinGW静态编译windows QT5.x
- HDU 1234 开门人和关门人
- tomcat配置文件server.xml详解
- VB程序学习代码记录20160721
- 【离散数学】单向连通和弱连通的区别