系统提供的有不同的内存管理方案,大致有如下三种:
- TaggedPointer (对于一些小对象,比如说NSNumber,NSString等采用此种方案)
- NONPOINTER_ISA (64位架构下iOS应用程序)
- 散列表 (散列表为复杂的数据结构,包含了引用计数表和弱引用表)
TaggedPointer
以下2段代码能发生什么事?有什么区别?
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
for (int i = 0; i < 1000; i++) {
dispatch_asy