每次我在我的应用程序中翻页时,我都会删除并释放之前的viewController - 但由于某种原因它仍然在内存中。我知道这一点,因为在使用应用程序一段时间后,我得到47个内存警告 - 每个视图控制器一个 - 如果我在发生内存警告之前打开了47页。如果在发生内存警告之前打开了60页,我会收到60个内存警告。等等...
这是从页面到页面运行的代码:
UIViewController *nextController;
Class nextClass = [pageClasses objectAtIndex:(currentPageIndex - 1)];
nextController = [[nextClass alloc] initWithNibName:[pageNibs objectAtIndex:(currentPageIndex - 1)] bundle:nil];
[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];
[currentPageController release];
currentPageController = nextController;
[currentPageController retain];
[nextController release];
任何人都可以指出他们看到的任何问题吗?
非常感谢!
答案 0 :(得分:1)
除此之外,请确保nil
您的viewController在viewDidUnload
中有任何出口,并且通常与viewDidLoad
中的任何相应代码相反。我看到很多iOS代码没有这样做,它会停止运行时正确卸载视图控制器和相关视图。
答案 1 :(得分:0)
您是否在IB的Inspector中使用了“窗口属性”面板的“行为”和“记忆”部分?这是您通常控制内存使用和释放内容(代码本身之外)的地方。 尝试更改相关视图对象的值,以及窗口(或iPhone的任何内容)。
答案 2 :(得分:0)
我相信这是因为您在retain
上呼叫currentPageController
。我刚刚问了一个similar question,并对内存管理做了大量的澄清。
编辑:如果你做了类似的事情怎么办?
[currentPageController.view removeFromSuperview];
[currentPageController release];
Class nextClass = [pageClasses objectAtIndex:(currentPageIndex - 1)];
currentPageController = [[nextClass alloc] initWithNibName:[pageNibs objectAtIndex:(currentPageIndex - 1)] bundle:nil];
[currentPageController performSelector:@selector(setDelegate:) withObject:self];
[self.view addSubview:currentPageController.view];
它会稍微清理代码并且不会泄漏内存。