【发布时间】:2011-08-20 17:08:28
【问题描述】:
可能重复:
check retain count
当我在玩retain,release 计数时,我遇到了一种情况,我无法解释。请帮助我更好地理解它:
- 有一个类
O。它不包含变量,也不做任何事情。 - 有一个类 Count。它初始化
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];
}
每当调用释放时,计数就会减少
- (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
- 此版本涉及内存不足并导致应用程序崩溃。
请帮助我理解这种行为
【问题讨论】: