我的iPhone应用程序在部署到设备时遇到问题,主要是因为到目前为止我还没有处理内存警告(在模拟器中没有问题,我的开发机器上有4GB内存!)。没问题,我只需要更熟练地处理这些警告(不那么糟糕......)。
问题是,运行时释放哪个内存...只是视图和子视图?我怀疑它只是这些,但是要确保运行时不会取消引用控制器中的任何对象或内存(即不在视图中)。
子问题:如果它只是视图和子视图,我是否需要在viewDidLoad中执行任何特殊操作以确保当视图返回到内存时视图显示正确的数据,或者是否所有内容都通过我的IBOutlet自动处理-s?
答案 0 :(得分:2)
视图或其子视图可能会缓存许多内容 - 例如图像数据。这些是将要清除的东西。 任何特定于您的应用程序的东西,您可以负担得起冲洗您需要通过处理该回调来做自己。
但是,这可能更多地表明您正在泄漏内存或者没有像现在这样高效。使用Leaks工具运行应用程序当然值得运行,以及使用CLANG编译器的静态代码分析器运行。此外,检查您的代码,看看您是否正在坚持您不需要的内存块 - 是否可以更多地压缩图像等。
请记住,在3GS或最新的iPod touch之前,系统内存为128Mb ,但您应该只依赖于您的应用程序可用的大约25-30Mb
答案 1 :(得分:0)
viewDidUnload和didRecieveMemoryWarning都不会自动释放任何内容。您需要覆盖这两种方法。
通常,viewDidUnload应该在视图中释放未在IB中创建的任何内容,并且您可以在视图再次加载时合理地处理重新加载。
didRecieveMemoryWarning是系统内存不足时发送到您应用的消息。当您的应用收到此消息时,您应该发布您不需要的任何内容和所有内容,否则系统会强行关闭您的应用。