У меня есть прокрутка, которая показывает разные изображения при прокрутке страниц, например, PhotoScroller. Я использую ARC. Когда кто-то прокручивает на другую страницу, я устанавливаю свойство изображения UIImageView, которое в настоящее время не отображается, равным nil, как (пытаясь) избежать сбоев памяти, которые все еще происходят. Затем, когда пользователь переходит к новой странице, изображение для этой страницы устанавливается как свойство изображения UIImageView, а также страница до и после нее (для плавного просмотра). UIImage для страниц все хранятся в массиве. Тем не менее, пока я прокручиваю страницы, использование памяти продолжает расти, как будто установка свойства image
в UIImageView на nil не освобождает его из памяти. Я использую initWithContentsOfFile
для инициализации своих UIImages. Я тоже пытался с imageNamed
и imageWithContentsOfFile
, но безуспешно. Вот мой код прокрутки:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{<br>
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`