ARC下查看对象的引用计数

网上各种文章、问答给出的结论都是“ARC下无法打印对象的引用计数值”。

确实,ARC禁止直接查看Objective-C对象的引用计数,但是Objective-C对象不是还可以转化为Core Foundation对象么?于是动手做了一个小实验:

id obj = [[NSObject alloc]init];
printf("retain count = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(obj)));

需要注意的是,这里要用__bridge来转换,如果用__bridge_retained来转换的话,实际上,生成了一个Core Foundation对象,并且retain了一次原来的Objective-C对象,造成引用计数比真实值大一。

运行结果

retain count = 1

工程开启了ARC模式,也正确输出了OC对象的引用计数值。

时间: 2025-01-12 05:40:52

ARC下查看对象的引用计数的相关文章

COM对象除了引用计数还有...

COM对象除了引用计数还有… 一.   背景: VideoManager支持实时, 需要同时传入一组窗口的设备信息和StreamerID, 并且传入之后需要设置给相对应的VideoView. 所以在VideoManager实现了IDeviceInfo的COM对象, 包含三个成员分别是IVideoView* video_view, GUID streamer_id, IDeviceConfig* device_config. C#的调用如下 var list_deviceInfo = new Li

Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

本文参考<Android系统源代码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder ----BpBinder.cpp ----Parcel.cpp ----ProcessState.cpp ----Binder.cpp ----IInterface.cpp ----IPCThreadState.cpp ----IServiceManager.cpp ----Static.cpp ~/Androi

Python 对象的引用计数和拷贝

Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己,可通过内建函数id(obj)查看. 2.type,对象的类型决定了该对象可以保存什么类型的值,可用内建函数type(obj)查看: 3.value,即对象的值. 下面是一个例子: >>> str = "hello world" >>> type(str

对象的引用计数

在OC中所有的引用类型都被声明为指针类型,指针类型在内存中占用若干地址空间,如果对象的内存使用不当,则会造成内存溢出,甚至程序崩溃的严重后果. 在其他语言中有内存自动回收的, 例如:Java语言,自动释放的. 手动管理内存:C++ , OC 2.0之前. 在OC 2.0之后,提供了内存自动个管理机制ARC,我们很少关系内存管理,但是了解内存内管是必要的! 在OC中如何判断一个对象何时分配内存,有何时释放内存呢? OC提供了对象的引用计数法则. 对于每个对象都有一个retainCount属性,当属

[转]iOS中ARC下Block的循环引用

[ARC的特性] ARC下,所有NSObject类型指针, 1. 默认为__strong类型 2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil 3. __autorelesing类型用于inout参数类型 ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用.例如: return pObject; 编译器会帮我们扩展为 return [pObject autorelease]; ARC下,不能显式relea

ARC下OC对象和CF对象之间的桥接(bridge)

在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下

QPointer,QSharedPointer,QWeakPointer的区别与使用例子(QSharedPointer类似Delphi里的引用计数,是强引用,而QWeakPointer是弱引用,不影响原始对象的引用计数,相当于是在暗中观察对象,但保持联系,需要的时候就会出现)

QPointer is a template class that provides guarded pointers to Qt objects and behaves like a normal C++ pointer except that it is automatically set to 0 when the referenced object is destroyed and no "dangling pointers" are produced.QSharedPoint

OC中内存管理问题之引用计数

定义一个Person类 其实引用计数这个问题大家可以理解为租房子的问题, 如果有retain alloc 代表这个人租了这间大房子, 拿到了一把钥匙, 引用计数代表房子一共有的钥匙的数量, release代表退房归还钥匙 Person * p = [[Person alloc] init];//房东盖好了一间房子, 现在是房东一个人 //alloc 开辟空间,引用计数由0变为1 //retainCount,用于查看对象的引用计数 NSLog(@"%lu", [p retainCount

ARC下的引用计数----debug

OBJC_EXTERN int _objc_rootRetainCount(id); _objc_rootRetainCount(self.QRcodeVc); NSLog(@"_objc_rootRetainCount(qr)%d",_objc_rootRetainCount(self.QRcodeVc)); 由于ARC是系统管理内存,虽然省却了大部分的内存管理,但是一旦循环引用集很难排除,这里是ARC下debug模式打印对象的引用计数,只能是debug!