为啥我的 ModalViewController 没有释放?

Posted

技术标签:

【中文标题】为啥我的 ModalViewController 没有释放?【英文标题】:Why my ModalViewController doesn't release?为什么我的 ModalViewController 没有释放? 【发布时间】:2011-03-30 00:50:38 【问题描述】:

我有下一步行动。

- (IBAction)openThumbMap:(UIButton *) sender

    ThumbmapViewController *viewController = [[ThumbmapViewController alloc] initWithInfo:mainPages];
    viewController.title = self.title;
    viewController.delegate = self;

    [self presentModalViewController:viewController animated:YES];

    [viewController release];

很简单,不是吗?好吧...一旦我这样做了[self dismissModalViewControllerAnimated:YES];在 viewController 内部,我回去了,但是内存并没有释放它。更糟糕的是,如果我再次调用它,内存会再次增加。为什么?

在我的 viewController 内部,我创建了很多 UIImageView,在将这些类似子视图添加到 viewController 的视图中后,我将其释放。那么,如果所有的都像子视图,必须在dissmis控制器后释放它,不是吗?

问题是。为什么内存还在增加呢?

编辑:

在我的 initWithInfo: 方法中,我使用来自父 viewController 的数据设置了一个 NSArray 属性。使用这个数组,我创建了一堆小的 UIImage,当我完成我的模态视图控制器时我会释放它们。

【问题讨论】:

你的视图控制器是否保留了它的委托? 有没有定时器?他们在对象上保留一个直到失效。 你是这个意思? @property (assign) id <ThumbmapViewControllerDelegate> delegate; 显然没有区别。不,不涉及计时器。 显示你的 -initWithInfo: 方法。 我只有:- (id)initWithInfo:(NSMutableArray *)magazineArray self = [super initWithNibName:@"ThumbmapViewController" bundle:nil]; if (self) self.mainPages = magazineArray; 返回自我; 【参考方案1】:

不是模态视图控制器本身,而是里面加载的 UIImage。我发现当你调用[UIImage imageNamed:@"blahblah.jpg"] 时,ios 会创建一个缓存,以防你再次调用该图像。所以,使用[UIImage imageWithData:(NSData *)] 是我错误表述问题的答案。

【讨论】:

以上是关于为啥我的 ModalViewController 没有释放?的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 ModalViewController 处理对象

出现 modalViewController 的问题

从 ModalViewController 更新 splitViewController

ModalViewController 仅在动画时显示

如何使用 UIModalPresentationPageSheet 调整 modalViewController 的大小

从 UISplitViewController 呈现的 modalViewController 出现方向错误