我正试图以模态方式呈现一个viewcontroller:
- (IBAction)addReference {
ReferenceAddViewController *referenceAddViewController = [[ReferenceAddViewController alloc] initWithNibName:@"ReferenceAddViewController" bundle:nil];
[referenceAddViewController setDelegate:self];
[self presentModalViewController:referenceAddViewController animated:YES];
[referenceAddViewController release];
}
但是,如果我调用[referenceAddViewController release],稍后当模态视图被解除时,我的应用程序崩溃了“[CALayer release]:消息发送到解除分配的实例0x4b90370”。
在工具中执行堆栈跟踪和引用计数历史并没有给出任何结论,只有两个历史步骤。
引用计数从1跳到-1是非常有趣的? Instruments会记录每个参考计数的变化吗?
我将如何进一步调试此问题?
答案 0 :(得分:1)
在解除模态视图控制器后,无需释放视图控制器。 presentModalViewController:animated:
将retainCount
递增1,dismissModalViewControllerAnimated:
递减1。
所以当你分配它(+1),呈现它(+1)并释放它(-1),然后它被解散(-1)retainCount
将为0,对象将被解除分配,一切都很好。如果您在解除后尝试释放它,则该对象已被解除分配并且无法正常工作。
答案 1 :(得分:0)
感谢您的回复,我一直认为当您调用alloc时,您会在开始时将引用计数增加到1?
在这种情况下,当调用presentModalViewController:animated:时,引用计数会变为2吗?
当模态视图被解除时,它会再次变为1,但从不0,因为我没有释放?