ARC机制之__strong详解
来源:互联网 发布:售票系统java 编辑:程序博客网 时间:2024/06/14 05:45
ARC机制之__strong详解
__strong 解析:
默认情况下,一个指针都会使用 __strong 属性,表明这是一个强引用。这意味着,只要引用存在,对象就不能被销毁。这是一种所期望的行为:当所有(强)引用都去除时,对象才能被收集和释放。
不过, 有时我们却希望禁用这种行为:一些集合类不应该增加其元素的引用,因为这会引起对象无法释放。在这种情况下,我们需要使用弱引用(不用担心,内置的集合类就是这么干的),使用 __weak关键字。NSHashTable就是一个例子。当被引用的对象消失时,弱引用会自动设置为 nil。Cocoa的 Notification Center就是这么一个例子,虽然这已经超出纯 Objective-C的语言范畴
自己更深理解:
1.(weak与strong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;
在OC中strong就相当于retain属性,而weak相当于assign。只有一种情况你需要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类},子类中又调用了父类{子类又retain了父类},这样都无法release)
2.一旦最后一个指向该对象的strong类型的指针离开,这个对象将被释放,如果这个时候还有weak指针指向该对象,则会清除掉所有剩余的weak指针
下面是笔者看书时遇到的疑问
(1) : __strong在ARC关闭时是否可用
(2): __strong修饰的变量,直接赋值时,赋值的变量的retain是否会自增(被赋值的变量retain是否会自减)
(3): __strong修饰的变量在超出其作用域时retain是否会自减
解答如下:
(1): 能
(2): 例如:
int count = 1;
id __strong obj1 =nil;
id__strong obj = [[NSObjectalloc]init];
obj1 = obj;//obj1 持有obj 赋值对象的强引用 会导致obj retain自增
NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));
NSLog(@"obj = %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));
打印如下:
2015-07-22 17:23:22.169字典[724:25567] Retain count is 2
2015-07-22 17:23:22.171字典[724:25567] obj = 2
说明:(1) :当一个对象获得另一个对象的强引用时,retain++;
(2): 被赋值的变量retain是会自减
(3):
int count =1;
id__strong obj1 =nil;
if(count){
id__strong obj = [[NSObjectalloc]init];
obj1 = obj;//obj1 持有obj 赋值对象的强引用 会导致obj retain自增
NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));
}
NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj1));
__strong修饰的变量在超出其作用域时retain是会自减
- ARC机制之__strong详解
- iOS开发之ARC机制详解
- ARC机制之__weak,__autorelease详解
- ARC机制详解
- ARC机制详解
- IOS 中 ARC机制详解
- iOS中ARC机制详解
- iOS中ARC机制详解
- ARC下 __strong 你理解吗?
- ARC所有权修饰符---__strong修饰符
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- arc机制
- struts2获取文件及获得扩展名
- Android提高(13)——第三章 Handler的原理
- [acg]
- 【DFS搜索】poj1011 Sticks
- 如何学习源码----转自知乎
- ARC机制之__strong详解
- scikit-learn:4.3. Preprocessing data(standardi/normali/binari..zation、encoding、missing value)
- c# 读取文件流
- Java JSON技术框架选型与实例
- git多人同步到远端
- 使用genstring和NSLocalizedString实现App文本的本地化
- OC中字符串的提取与替换-四种不同方法实现
- cxf+spring开发(一)--- 实现webservice简单输出实例
- 结构型模式-装饰模式