我有一个滚动视图,它在页面滚动时显示不同的图像,例如 PhotoScroller。我正在使用ARC。当有人滚动到另一个页面时,我将当前未显示的 UIImageView 的图像属性设置为 nil,作为(尝试)避免内存崩溃,这种情况仍在发生。然后,当用户滚动到新页面时,该页面的图像以及其之前和之后的页面都将设置为 UIImageView 的图像属性(以便平滑查看)。页面的 UIImage 全部保存在一个数组中。然而,当我滚动页面时,内存使用量不断增加,就像设置 UIImageView 的image
将属性设置为 nil 并不会从内存中释放它。我用initWithContentsOfFile
初始化我的 UIImages。我尝试过imageNamed
and 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 全部保存在一个数组中。
The UIImage
当您设置时,不会被释放UIImageView
的财产为nil
因为数组仍然保留对它们的引用。至于内存增长,可能是分配了其他东西。我建议使用 Instrument 的对象分配工具来跟踪滚动时到底增长了什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)