1

我有个问题:

ExploreViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ProfileViewController"];
vc.id_from = post.user_id;
[self.navigationController pushViewController:vc animated:YES];

如您所见,我实例化了 viewController 并将其推送到 navigationController 中。vc,应该是autorelease,但从不调用 dealloc 方法。

所以,如果我在推送后释放视图控制器:

ExploreViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ProfileViewController"];
vc.id_from = post.user_id;
[self.navigationController pushViewController:vc animated:YES];
[vc release];

当我弹出视图控制器时会调用 dealloc 方法,但是如果我再次执行上面的代码,则会立即调用 dealloc 并且应用程序崩溃,因为其他对象没有找到 vc。

所以,如果我不释放它,内存就会越来越忙。

谢谢大家!

4

2 回答 2

1

您应该只release在 alloc、new 或 copy 之后调用对象。在这种情况下,您不应致电[vc release].

于 2013-10-03T00:51:53.743 回答
1

它没有发布,因为当您:

[self.navigationController pushViewController:vc animated:YES];

有对UINavigationController的引用vc。所以基本上你有2个参考:

self.navigationController + ExploreViewController *vc = 2

在方法结束时,您有一个:

self.navigationController = 1

一旦你vc从 中弹出UINavigationControllervc应该释放 并dealloc调用方法。另一件事,你不应该调用release你不拥有的对象。在这种情况下instantiateViewControllerWithIdentifier,返回一个自动释放对象。

于 2013-10-02T23:39:01.470 回答