【发布时间】:2013-09-24 11:10:28
【问题描述】:
在 iOS 6.1 上,我有一个带有 scrollView 的视图控制器,当用户浏览页面时,我需要在其中显示一些图像。 scrollView 有 3 个子视图,分别显示当前、上一个和下一个图像。在滚动期间替换图像。 该机制工作正常,但资源没有按预期释放,并且应用在滚动大约 15 张图像后终止。
起初我尝试简单地将新图像分配给 UIImageView 来解决问题,但它不起作用(我读到图像被缓存),所以我尝试了另一种方法:
// access the UIImageView of the currentView
for (UIView *subviewOfCurrentView in [currentView subviews]) {
if ([subviewOfCurrentView isKindOfClass:[UIImageView class]]) {
UIImageView *cv = (UIImageView *)subviewOfCurrentView;
//cv.image = nil;
[cv removeFromSuperview];
UIImageView *new_cv = [[UIImageView alloc] initWithFrame:photoRect];
new_cv.image = [UIImage imageNamed:[myObject getFileName];
[currentView addSubview:new_cv];
}
}
使用 Activity Monitor 分析应用程序显示,当我轻弹图像时,实际内存使用量不断增长,尽管子视图的数量保持不变。
请注意,应用程序在没有调用 didReceiveMemoryWarning 的情况下终止。
如何强制我的应用释放 UIImage(s) 和 UIImageView(s) 使用的内存?
如果你能帮助我,不胜感激。
【问题讨论】:
-
为 imageview 设置 nil 并释放 Imageview。
-
我试过了,但没有任何作用。
-
通过 Profile 使用 Memory Leak Instrument 并查看内存高的位置。
-
您是否检查过您的内存在此代码上的高内存?
-
附注:打开分页的 UICollectionView 会让您的生活更轻松。
标签: ios objective-c memory-leaks uiimageview uiimage