Lui*_*BOL 5 cocoa objective-c objective-c-runtime nsobject retaincount
我的问题是当前版本的Foundation(或Objective-C运行时库,因为它似乎在那里)如何实现NSObject派生对象的保留计数?正如我在NSObject.mm上看到的那样,retain count在NSObject界面体中没有调用ivar .相反,似乎有一种表或映射包含每个对象的引用计数器.但是,如果保留计数真的与地图做,是不是retain和release行动与这种实现(因为太贵了,在这种情况下,有必要锁定和解锁互斥,查找地图,找到合适的对象,除了事实那么,在多线程环境中,一次只能保留/释放一个对象)?
我没有找到相关的新对象的分配时,保留计数器设置为1东西,无论是在_objc_rootAllocWithZone在NSObject.mm(这似乎是被调用的函数[NSObject alloc])也不_class_createInstanceFromZone在objc-runtime-new.mm(即后来被称为_objc_rootAllocWithZone.
Lil*_*ard 10
保留计数NSObject确实保存在全局地图中.IIRC它实际上使用了一组被分区的映射,可能是基于对象的地址,以减少锁争用,但实际的实现细节就是实现细节.
在任何情况下,您都找不到将保留计数设置为1的代码,因为没有任何代码.保留计数为1的对象不会放入地图中.对象仅在retain超过初始值1 时才进入保留计数映射.这是一种优化,可加速从未使其保留计数超过1的对象的常见情况.
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |