在instantiateViewControllerWithIdentifier之后的dealloc

时间:2013-10-02 22:38:25

标签: ios objective-c storyboard release dealloc

我有一个问题:

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并且app崩溃,因为其他对象没有找到vc。

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

谢谢大家!

2 个答案:

答案 0 :(得分:1)

它没有发布,因为当你:

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

UINavigationController引用了vc。所以基本上你有2个引用它:

self.navigationController + ExploreViewController *vc = 2

在方法结束时你有一个:

self.navigationController = 1

vc中弹出UINavigationController后,应释放vc并调用dealloc方法。另外,你不应该在你不拥有的对象上调用release。在这种情况下,instantiateViewControllerWithIdentifier返回自动释放对象。

答案 1 :(得分:1)

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