在管理内存的时候经常需要打印对象的引用计数,来检测对象是否发生内存泄漏,但是在ARC下是禁止查看Objective-C对象的引用计数的,所以导致在ARC下无法打印对象的引用计数;
但是Objective-C 对象可以转化为CoreFoundation对象,所以可以使用如下代码在ARC下打印对象的引用计数;
id Obj =[[NSObject alloc ]init];
NSlog(@"retain count = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(obj)));
这里需要注意的是,要用__bridge来转换,如果用__bridge_retained 来转换的话,实际上生成了一个CoreFoundation 对象,并且retain了一次原来的Objective-C对象,使得引用计数比真实值大一;
使用__bridge_retained的输出结果: