我正在使用MapView和UIImagePicker创建一个应用程序。我在用户移动时在屏幕上显示地图及其显示路线。用户可以在其间捕获图像。我有两个屏幕..
当我转到屏幕1到屏幕2.我显示一个ImagePicker并允许用户捕获图像。当我回到第1屏幕时,release
所有对象并将其设为nil
。此任务通常在viewDidUnload
中完成,但我遇到了内存问题,所以当我的视图控制器弹出时我就这样做了。所以,一旦我完成它,我的所有对象都会释放并且为零。
当我从地图进入登录界面时,我正在做我认识的所有事情:
nil
值设置为所有这些对象。当我通过分析运行应用程序并且没有运行时泄漏可用但是即使在Activity Monitor中我的应用程序的真实内存也会继续增加:(
10-12张图片被捕获后我得到Received memory warning. Level=1
我甚至没有将UIImage对象存储在内存中。我在文档目录中写这个并只存储字符串路径。
请帮助我并指导我还可以采取哪些措施来解决这个问题。
更新
在释放后退按钮上的对象时,我正在使用:
- (void)releaseObjects {
[mapViewNewTour setDelegate:nil];
[mapViewNewTour removeFromSuperView];
[mapViewNewTour release];
mapViewNewTour = nil;
[lblNavTitle release];
lblNavTitle = nil;
[btnEdit release];
btnEdit = nil;
[txtTourName release];
txtTourName = nil;
[vwTourName release];
vwTourName = nil;
[mutDictOfflineSharing release];
mutDictOfflineSharing = nil;
[mutArrImage release];
mutArrImage = nil;
[_routeLine release];
_routeLine = nil;
[_routeLineView release];
_routeLineView = nil;
[aLazyLoader release];
}
答案 0 :(得分:3)
4.3也支持ARC,所以请使用它。
您使用专门的“releaseEverything”方法的方法一直被打破 - 它显示缺乏所有权跟踪,并且最好是黑客攻击。
viewDidUnload
现在已被弃用,并且不会被iOS 6中的系统调用(您应该构建它)。
不要与框架作斗争 - 以“正确”的方式进行。
答案 1 :(得分:0)
我建议您运行乐器并查看使用内存的位置。存在用于存储器使用分析的特定工具。您需要的仪器是活动监视器和VM跟踪器。
另外,我建议你仔细检查一下你没有运行NSZombieEnabled(在方案中检查),因为它会引起内存警告。