【发布时间】:2012-01-25 17:49:00
【问题描述】:
我遇到了一个奇怪的情况,即按下按钮时我正在加载的视图控制器的保留计数过多。
这是代码:
-(IBAction)new
{
if (!viewSpace)
viewSpace = [[ViewSpace alloc] initWithNibName:@"ViewSpace" bundle:nil];
viewSpace.delegate = self;
viewSpace.view.frame = CGRectMake(0, 0, viewSpace.view.frame.size.width, viewSpace.view.frame.size.height);
[self presentModalViewController:viewSpace animated:YES];
NSLog(@"Count Retain: %d",[viewSpace retainCount]);
}
-(void)viewSpaceWasDissmissed:(id)sender
{
[self dismissModalViewControllerAnimated:YES];
[viewSpace release];
NSLog(@"Count Retain: %d",[viewSpace retainCount]);
}
IBAction New 首次执行时,刚创建时的保留计数为 5。 (必须为 1)。
当必须卸载 ViewSpace 对象时,调用 viewSpaceWasDismissed 函数以移除模态视图并释放前一个对象。
问题是retain count永远不会达到0,ViewSpace的dealloc方法永远不会被调用导致内存泄漏。
我的问题是最近创建的 ViewController 怎么可能有 5 个保留?我确保以前从未创建过。
谢谢。
【问题讨论】:
-
retainCount完全没用。你在浪费时间去想它。 -
是的,但问题是永远无法达到 ViewSpace 对象的 dealloc。这会导致我的应用内存使用率过高并崩溃。
-
@bbum 你是在看retainCount 标签的RSS 提要,还是什么? ;)
-
@user1132003 然后你需要弄清楚额外保留来自哪里,
retainCount不会告诉你。使用分配工具并打开保留事件跟踪。然后查看所有的保留事件并找出哪个没有被release平衡。 -
@abizem 是的——它提供了一点娱乐。我完全承认自己很容易被逗乐。
标签: objective-c release retaincount