У меня есть большой UIScrollView, в который я помещаю 3-4 довольно больших (320x1500 пикселей или около того) фрагментов изображения UIImageView. Я добавляю эти UIImageViews в список прокрутки внутри своих файлов NIB. У меня есть один выход на моем контроллере, и это касается UIScrollView. Я использую свойство (неатомное, сохраняю) для этого и процитирую его.
Мой вопрос заключается в следующем: когда я наблюдаю это в Memory Monitor, я вижу, что используемая память немного возрастает, когда изображение со всеми этими изображениями загружается (как и ожидалось). Но когда я оставляю представление, он и его контроллер деллакод, но, похоже, не сдаются где-то рядом с памятью, которую они использовали. Когда я вырезал один из этих видов (в моем приложении несколько) вплоть до 1-3 изображений, которые были 320x460, и оставил все остальное одинаково, он восстанавливает память просто отлично.
Есть ли какая-то проблема с использованием больших изображений? Я делаю что-то не так в этом коде (вставляем ниже)?
Это фрагмент из viewController, который вызывает проблемы.
- (CGFloat)findHeight
{
UIImageView *imageView = nil;
NSArray *subviews = [self.scrollView subviews];
CGFloat maxYLoc = 0;
for (imageView in subviews)
{
if ([imageView isKindOfClass:[UIImageView class]])
{
CGRect frame = imageView.frame;
if ((frame.origin.y + frame.size.height) > maxYLoc) {
maxYLoc = frame.origin.y;
maxYLoc += frame.size.height;
}
}
}
return maxYLoc;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.scrollView setContentSize:CGSizeMake(320, [self findHeight])];
[self.scrollView setCanCancelContentTouches:NO];
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.clipsToBounds = YES;
self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = NO;
}
- (void)dealloc {
NSLog(@"DAY Controller Dealloc'd");
self.scrollView = nil;
[super dealloc];
}
ОБНОВЛЕНИЕ: Я заметил еще одно странное явление. Если я не использую свиток в представлении, он, кажется, висит на памяти. Но если я прокручу кучу и убедитесь, что все UIImageView стали видимыми в какой-то момент, он освободит и вернет большую часть потерянной памяти.
UPDATE2: Причина, по которой я прошу об этом, - это мое приложение, которое действительно сбой из-за низкой памяти. Я бы не прочь, если бы это было просто кеширование и использование дополнительной памяти, но оно, похоже, никогда не выпускает его - даже в условиях doReceiveMmoryWarning