alloc/retain/release/dealloc的实现

前提

因为包含NSObject类的Foundation框架没开源,Foundation框架使用的Core Foundation框架以及通过NSObject类进行内存管理的部分源代码是开源的。我们可以通过GNUstep框架查看NSObject类的alloc的实现,GNUStep框架是Cocoa框架的互换框架,两者的实现是相似的。

 

GNUStep使用内存块头部管理引用计数,苹果使用引用计数表(哈希表)管理引用计数。

内存块头部管理引用计数简单又高效,且可以统一管理引用计数用内存和对象用内存;

引用计数表管理引用计数:分配内存时无需考虑内存块头部,引用计数表各记录中存有内存块地址,可以从各个记录中追溯到对象的内存块;

内存块地址对调试很重要,比如对象的内存块由于故障被破坏时,只要能够从引用计数表中找到内存地址,就可以追溯到各对象的内存块。

posted on 2017-08-17 17:13  liwuking  阅读(90)  评论(0编辑  收藏  举报

导航