Objective-C高级编程:iOS内存管理和引用计数

1.自动引用计数
在NSObject类的alloc类方法上设置断点,追踪程序的执行。以下列出执行所调用的方法和函数。
+alloc;
+allocWithZone;
class_createInstance;
calloc
各个方法都通过同一个调用_CFDoExternRefOperation函数,调用了一系列名称相似的函数。苹果的实现大概就是采用离散列表(引用计数表)来管理引用计数

Objective-C高级编程:iOS内存管理和引用计数_第1张图片
屏幕快照 2017-02-05 下午3.27.38.png

通过引用计数表管理引用计数的好处
1.对象用内存块的分配无需考虑内存块头部
2.引用计数表各记录存有内存块地址,可从各个记录追溯到各对象的内存块,方便检查内存泄漏

2.autorelease

NSRunloop每次循环过程中NSAutoreleasePool对象被生成或废弃

NSAutoreleasePool *pool  =  [ [NSAutoreleasePool alloc]init];
id obj  =  [ [NSObject alloc]  init];
[obj autorelease];
[pool drain]

autorelease 实例方法的本质就是调用NSAutoreleasePool对象的addObject类方法

[NSAutoreleasePool showPools];
会将现在的NSAutoreleasePool的状况输出到控制台

你可能感兴趣的:(Objective-C高级编程:iOS内存管理和引用计数)