我有这个代码用故事板打开一个视图控制器
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
secondViewController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self.view addSubview:secondViewController.view];
它工作正常,但当我删除它时,我想发布secondViewController
[secondViewController.view removeFromSuperview];
并释放它???当我调用secondViewController时没有一个alloc ...
答案 0 :(得分:2)
-instantiateViewControllerWithIdentifier:
会返回autoreleased
个对象。您不必释放它。当您从view
移除superview
时,它将被释放。如果您使用的是ARC
,则根本不应该问这个问题......
答案 1 :(得分:0)
我假设您正在使用ARC。只需写下secondViewController = nil;
即可。它应该自动发布。
答案 2 :(得分:0)
首先,区分可视化UIView实例和UIViewController实例非常重要。 instantiateViewControllerWithIdentifier
调用返回一个具有UIView属性的视图控制器对象(UIViewController不需要显式释放,因为它是一个自动释放的实例) - 这个 UIView 是被添加到的内容一个超级视图,它也被它保留,只要它确实是某个视图的子视图。一旦从superview中删除了该视图并提供了使用ARC,除非你持有对它的UIViewController的强引用,否则应该发布视图,在这种情况下只需指定UIViewController属性nil值就可以处理它。如果未使用ARC,则只有在明确保留视图控制器(不是视图)时才需要调用“release”