Setting uiimage to nil doesnamp;#39;t release memory with ARC(将uiImage设置为零不会使用ARC释放内存(amp;t;t)
问题描述
我有一个滚动视图,可以在页面滚动时显示不同的图像,就像PhotoScroller一样。我用的是ARC。当有人滚动到另一个页面时,我将当前未显示的UIImageView的图像属性设置为零,以避免仍在发生的内存崩溃。然后,当用户滚动到新页面时,该页面的图像被设置为UIImageView的图像属性,以及它之前和之后的页面(为了流畅查看)。页面的UIImage都保存在一个数组中。然而,当我滚动页面时,内存使用量不断增加,似乎将UIImageView的image
属性设置为nil并没有将其从内存中释放出来。我使用initWithContentsOfFile
初始化我的UIImages。我也尝试了imageNamed
和imageWithContentsOfFile
,但没有成功。以下是我的滚动视图代码:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int indexShown = self.scrollView.bounds.origin.x / kScrollObjWidth;
for(NSNumber *index in indexesToRemove)
{
UIImageView *imgViewToRemove = [[self.scrollView subviews] objectAtIndex:[index intValue]];
imgViewToRemove.image = nil;
}
[indexesToRemove removeAllObjects];
UIImageView *imgViewToReplace = [[self.scrollView subviews] objectAtIndex:indexShown];
[imgViewToReplace setImage:[pageUIImagesArr objectAtIndex:indexShown]];
[indexesToRemove addObject:[NSNumber numberWithInt:indexShown]];
if(indexShown != 0 && ![[[self.scrollView subviews] objectAtIndex:indexShown-1] image])
{
imgViewToReplace = [[self.scrollView subviews] objectAtIndex:indexShown-1];
[imgViewToReplace setImage:[pageUIImagesArr objectAtIndex:indexShown-1]];
[indexesToRemove addObject:[NSNumber numberWithInt:indexShown-1]];
}
if(indexShown != kNumImages-1 && ![[[self.scrollView subviews] objectAtIndex:indexShown+1] image])
{
imgViewToReplace = [[self.scrollView subviews] objectAtIndex:indexShown+1];
[imgViewToReplace setImage:[pageUIImagesArr objectAtIndex:indexShown+1]];
[indexesToRemove addObject:[NSNumber numberWithInt:indexShown+1]];
}
currentView = [[self.scrollView subviews] objectAtIndex:indexShown];
//check which view is being shown`
推荐答案
页面的UIImage都保存在一个数组中。
当您将UIImageView
的属性设置为nil
时,UIImage
的不会被释放,因为数组仍然持有对它们的引用。至于内存增长,可能是正在分配的其他内存。我建议您使用仪器的对象分配工具来跟踪滚动时到底发生了什么增长。
这篇关于将uiImage设置为零不会使用ARC释放内存(&;t;t的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将uiImage设置为零不会使用ARC释放内存(&;t;t
基础教程推荐
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01