0

我试图呈现一个模态的ViewController:释放模态视图内容控制器使得:CALayer的释放 - 消息发送到释放的实例

- (IBAction)addReference { 

    ReferenceAddViewController *referenceAddViewController = [[ReferenceAddViewController alloc] initWithNibName:@"ReferenceAddViewController" bundle:nil]; 
    [referenceAddViewController setDelegate:self]; 

    [self presentModalViewController:referenceAddViewController animated:YES]; 

    [referenceAddViewController release]; 
} 

但是,如果我调用[referenceAddViewController释放],稍后当模态视图被解雇,我的应用程序崩溃与“[CALayer发布]:消息发送到释放实例0x4b90370”。

在乐器中执行堆栈跟踪和引用计数历史记录并没有给出任何结论性的结论,只有两个历史步骤。

  • 0:保留计数1 - 在我的代码中使用了现有的ModalViewController。
  • 1:保留计数-1 - 在我 代码没什么除了main.m文件

它是从1引用计数跳跃如何-1很有趣?仪器是否记录每次引用计数更改?

我将如何进一步调试此问题?

回答

1

在模态视图控制器关闭后,不需要释放视图控制器。它由1

所以,当你将它分配(+1),目前它(+1)presentModalViewController:animated:增量retainCount 1,和dismissModalViewControllerAnimated:递减和释放它(-1),后来就被解雇( - 1)retainCount将为0,对象将被释放,并且一切正常。如果您在解散后尝试释放它,则该对象已被释放,并且不起作用。

0

感谢您的回复,我一直认为当您调用alloc时,您在开始时将引用计数增加到1?

在这种情况下,当调用presentModalViewController:animated:时,引用计数是否为2?

当模态视图被解散时,它会变成1,但从来没有0,因为我没有释放?

+0

调用'[referenceAddViewController release];'释放你分配的对象。调用'presentModalViewController'不会分配任何东西,所以你不负责释放任何东西。你只负责你明确分配的对象 – iwasrobbed 2010-08-30 02:26:03

相关问题