У моего приложения есть три UIImageViews
. Имеется около 150 изображений в виде файлов ресурсов, каждое .jpg размером около 24К. Приложение покажет все изображения, но только три одновременно.
Но каждый раз, когда я нажимаю кнопку, чтобы загрузить еще три изображения в UIImageViews
, столбец «Общие байты» в приборах увеличивается примерно на 700 КБ, пока в итоге не появится предупреждение о нехватке памяти, а затем приложение вылетает. Почему-то память, которую я использую для каждой загрузки трех изображений, не высвобождается.
Я погуглил и попробовал все, что я знаю, чтобы сделать это, но безуспешно, и мне нужна помощь.
Я пробовал это: (Этот код является частью действия для загрузки еще трех изображений. Три ImageViews это imgShownLeft
, imgShownMiddle
и imgShownRight
. Это переменные экземпляра. Сначала я должен поставить currentImage
во всех трех UIImageViews
, а затем поместите previousImage
в левую и nextImage
в правую:
NSString *strImageToSet = [[imgNamesArray objectAtIndex:currentImage] stringByAppendingFormat:@".jpg"];
UIImage *img = [UIImage imageNamed:strImageToSet];
[imgShownMiddle setImage:img];
[imgShownLeft setImage:img];
[imgShownRight setImage:img];
NSString *strPreviousImage = [[imgNamesArray objectAtIndex:previousImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strPreviousImage];
[imgShownLeft setImage:img];
NSString *strNextImage = [[imgNamesArray objectAtIndex:nextImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strNextImage];
[imgShownRight setImage:img];
Тогда я попробовал это:
вместо:
UIImage *img = [UIImage imageNamed:strImageToSet];
Я использовал:
UIImage *img = [[UIImage alloc] initWithContentsOfFile:strImageToSet];
и присваивает img
UIImageViews
таким же образом, после чего следует
[img release];
Тогда я попробовал:
UIImage *img = [[[UIImage alloc] initWithContentsOfFile:strImageToSet] autorelease];
Тогда я попробовал:
img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];
Но в каждом случае требования к памяти росли с каждым запуском этого действия.
Я знаю, что можно одновременно загружать три изображения, не сохраняя 150 изображений в памяти! Что я делаю не так?
Спасибо за понимание.
/ SD