Xcode8 中的retainCount
来源:互联网 发布:项目管理平台软件 编辑:程序博客网 时间:2024/06/06 03:56
序言:
苹果现在是及其不推荐使用retainCount
的,也就是不推荐使用手动管理内存。
不信看下面就能体会到了。
例子1:
新创建一个非ARC环境的BridgeMRC
文件。
#import "BridgeMRC.h"@implementation BridgeMRC- (void)forExample{ NSString *aNNstring = [NSString stringWithFormat:@"%@",@"hello world"]; NSLog(@"aNNstring Retain count is ====== %ld", [aNNstring retainCount]); CFStringRef aCFString = (CFStringRef)aNNstring; NSLog(@"CFGetRetainCount is ~~~ %ld", CFGetRetainCount(aCFString)); [aNNstring release];}@end
我们用控制台打印下retaiCount
,发现命令无效。
在以前的Xcode
版本,Objective -C Automatic Reference Counting
设置为NO
是可以输出结果的。
但是现在即使那么设置,也是不行啊。
既然控制台不可以了,那么我们就在代码中NSLog
出来吧。
打印方法1、retainCount
对于Foundation
对象,使用retainCount
方法获得。
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;
仔细看方法retainCount
方法,在ARC中是无法使用的。
我们只能把某个文件设置为MRC,然后才能打印。
打印方法2、CFGetRetainCount(<#CFTypeRef cf#>)
对于Core Foundation
对象,只能使用 CFGetRetainCount(<#CFTypeRef cf#>)
方法。
NSLog(@"CFGetRetainCount is ~~~ %ld", CFGetRetainCount(aCFString));
对于Foundation
对象,我们也可以使用此方法.
NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)aNNstring));
例子2:
上面的代码我们稍加修改,仅仅修改下aNNstring
的初始化:
#import "BridgeMRC.h"@implementation BridgeMRC- (void)forExample{ NSString *aNNstring = @"hello"; NSLog(@"aNNstring Retain count is ====== %ld", [aNNstring retainCount]); CFStringRef aCFString = (CFStringRef)aNNstring; NSLog(@"CFGetRetainCount is ~~~ %ld", CFGetRetainCount(aCFString)); [aNNstring release];}@end
我们看下控制台的打印结果,
结果让我们大跌眼镜!这是搞毛线啊!
查阅了一下官方的文档,第一句就是“Do not use this method.”
后面给出了说明,因为Autorelease pool
的存在,对于内存的管理会相当复杂,retainCount
就不能用作调试内存时的依据了。这样对于第一段的结果就可以理解了,可能系统对于这一个特殊的对象有特殊的处理(没准framework
里面有早就创建了这个对象了),于是我们拿到了一个非常出人意料的结果。
阅读全文
0 0
- Xcode8 中的retainCount
- iOS中的retainCount
- RetainCount
- 浅谈Xcode8中的小坑
- Xcode8
- Xcode8
- iOS 解决xcode8中的xib冲突
- Xcode4.2中的release,retainCount, retain“不能”使用的理解和的解决办法
- 理解NSString的RetainCount
- release 与 retainCount
- 关于 retainCount 的疑问
- NSString的retainCount
- Object-C retainCount
- iOS retain retainCount
- 集合类的retainCount
- NSString的retainCount
- GDB中查看retainCount
- 引用计数(retainCount)
- 大理石在哪儿(Where is the marble?,UVa 10474)
- NYOJ 305 表达式求值
- 《linux程序设计》多线程学习
- barcodelib打印条码C#例子
- centos7下升级cmake,很简单
- Xcode8 中的retainCount
- Charles https抓包 — Android
- easyUI 判断弹窗是否是open 状态
- video/audio onended(播放完成)事件
- 【笨鸟先飞】android重新学习日记1---布局
- 使用Sense浏览器插件操作ElasticSearch CRUD
- Piggy-Bank
- 给控件设置背景颜色
- C语言程序里何时用分号?