【发布时间】:2011-10-16 09:50:40
【问题描述】:
我正在将我的 UIViewController 子类推送到导航堆栈上;然而,由于它被 navigationController 保留,我在将它推入堆栈后“释放”指向它的指针,这样当它最终被弹出时,viewController 将被释放。
但是,它不起作用,viewController 的 dealloc 方法永远不会被调用。代码如下所示:
MyViewController *newViewController =
[self.storyboard instantiateViewControllerWithIdentifier:@"foo"];
[self.navigationController pushViewController:newViewController animated:YES];
newViewController = nil;
即使在以下代码中,我的 newViewController 也没有被解除分配:
MyViewController *newViewController =
[self.storyboard instantiateViewControllerWithIdentifier:@"foo"];
newViewController = nil;
据我了解,在新的自动引用计数 (ARC) 系统下,一旦没有任何指向对象,对象就会被解除分配。我在正在创建的 viewController 的 dealloc 方法中放了一个 NSLog 方法,但它从未被调用过。
我在这里错过了什么?!
感谢您阅读我关于堆栈溢出的第一篇文章 :)
**编辑:**
我道歉。我尝试了包装在自动释放池中的第二段代码,它被释放了。然后我在没有自动释放池的情况下尝试了它,它也正确释放了。我不知道昨晚发生了什么。
(第二次编辑:现在它又停止工作了。fffffffuuuuuuuuuuuu)
【问题讨论】:
-
由于 ARC 仍在测试中,它可能仍然存在一些错误。
-
instanceViewControllerWithIdentifier 是否返回自动释放对象?即在返回之前已发送
autorelease消息的邮件? -
你有一个目标是视图控制器的 NSTimer 吗?在 ARC 下,您必须使计时器无效,因为它们保留了它们的目标。
-
我遇到了同样的问题...你知道如何释放视图控制器吗?我正在使用 Xcode5,ARC。
标签: iphone objective-c ios uiviewcontroller automatic-ref-counting