我有一个问题:
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。
所以,如果我不释放它,内存会越来越忙。
谢谢大家!
答案 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].