,因为我是用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
- 之后whic h下一个减少.....看起来什么都不做保持计数仍然是1
- 此版本引用坏内存并使应用程序崩溃。
请帮助我理解这种行为
这非常合理。感谢道格 – JAM