作者:失望与痛心 | 来源:互联网 | 2024-11-12 12:52
在 iOS 开发中,内存管理是必不可少的一部分。初学者往往因为内存管理不当而导致程序崩溃。本文将详细介绍 iOS 中内存的分配与释放机制,并提供一些实用的技巧。
iOS 中的内存释放相对简单,遵循一个基本原则:你分配了内存,你就负责释放。具体来说,对于通过 retain
、new
、alloc
、copy
和 mutableCopy
创建的对象,你需要调用 release
或 autorelease
来释放它们。
需要注意的是,许多方法会自动增加对象的引用计数。例如:
NSString *test = [[NSString alloc] initWithFormat:@"%d", 111];
NSLog(@"%d", [test retainCount]); // 此时 test 的 retainCount 为 1
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:test, nil];
NSLog(@"%d", [test retainCount]); // 此时 test 的 retainCount 为 2,因为 array 中添加了 test 对象,所以 test 被 retain
[array addObject:test];
NSLog(@"%d", [test retainCount]); // 此时 test 的 retainCount 为 3,因为 array 中又添加了 test 对象,所以 test 被 retain
[array release];
NSLog(@"%d", [test retainCount]); // 此时 test 的 retainCount 为 1,array 被释放,它会自动释放自己内部的对象,所以 test 的 retainCount 又变回 1
因此,在调用类似 addObject:
这样的方法后,如果你不再使用某个对象,请务必释放它。不用担心“如果我释放了这个对象,那么容器中的对象是不是会消失?”这样的问题。实际上,如果你不释放它,反而会导致内存泄漏。
retainCount
类似于 Java 中的引用计数。当 retainCount
为 0 时,对象的 dealloc
方法会被调用,从而释放该对象。