0

我有这段代码可以打开带有情节提要的视图控制器

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    secondViewController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self.view addSubview:secondViewController.view];

它工作正常,但是当我删除它时,我想释放 secondViewController

[secondViewController.view removeFromSuperview];

并释放它???当我调用 secondViewController 时没有分配...

4

3 回答 3

2

-instantiateViewControllerWithIdentifier:返回一个autoreleased对象。你不必释放它。当您将其view从其中删除时superview,它将被释放。如果您使用的是ARC这个问题,则根本不应该问...

于 2013-01-04T11:15:06.673 回答
0

我假设您正在使用 ARC。就写吧secondViewController = nil;。它应该自动释放。

于 2013-01-04T11:13:10.700 回答
0

首先,区分你的可视化 UIView 实例和 UIViewController 实例是很重要的。该instantiateViewControllerWithIdentifier调用返回一个具有 UIView 属性的视图控制器对象( UIViewController 不需要显式释放,因为它是一个自动释放的实例) - 这个UIView是添加到超级视图的内容,它也被它保留,只要因为它确实是某些视图的子视图。从超级视图中删除该视图并提供您使用 ARC 后,应该释放该视图,除非您对它的 UIViewController 持有强引用,在这种情况下,只需为 UIViewController 属性分配一个 nil 值即可处理它。如果不使用ARC,则需要调用“release”(不是视图)

于 2013-01-04T11:16:02.493 回答