可能重复:
检查保留计数
当我在玩时retain
,release
计数,我遇到了一种情况,我无法解释。请帮助我更好地理解它:
- 有一堂课
O
。它不包含变量,也不做任何事情。 - 有一个类计数。它初始化
O
并递增,递减计数 - 有一个带有 2 个按钮的 UI 笔尖:保留和释放
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
o = [[O alloc]init]; // At this moment [o retainCount] is 1 as expected
....
对于每个 doRetain,按预期计算增量
- (IBAction)doRetain:(id)sender {
[o retain];
NSString *result = [[NSString alloc] initWithFormat:@"%d", [o retainCount]];
[label setText: result];
[result release];
}
每当调用 release 时,计数都会减少
- (IBAction)doRelease:(id)sender {
[o release];
NSString *result = [[NSString alloc] initWithFormat:@"%d", [o retainCount]];
[label setText: result];
[result release];
}
考虑 1 个保留和 2 个发布
- 在分配初始化序列之后,我们从保留计数 1 开始
- 其次是手动保留计数上升到 2
- 然后我们减少计数,它下降到 1
- 之后下一个减少......似乎什么也没做保留计数仍然是1
- 此版本指的是内存不足并导致应用程序崩溃。
请帮助我理解这种行为