Вы рушитесь из-за недостатка памяти?
Вы можете попробовать предварительно загрузить предыдущие, текущие и последующие изображения и выпустить их как можно скорее. Загрузка 22 изображений в память занимает довольно много места.
Я разрабатываю игру, в которой мне приходится загружать изображения на пальцах. for ( int i = 0 ; i <= totalNoofPages ; i ++) { NSString * graphicsFileName = @ "Страница" ; graphicsFileName = [ graphicsFileName stringByAppendingString : [ NSString stringWithFormat : @ "% d" , i ]]; UIImage * изображение = [[ UIImage Alloc ] initWithContentsOfFile : [[ NSBundle mainBundle ] pathForResource : graphicsFileName ofType : @ "jpg" ]]; GraphicsImages = [[ UIImageView Alloc ] initWithFrame : CGRectMake ( 0 , 0 , 480 , 320 )]; GraphicsImages . image = изображение ; [ освобождение изображения ]; [ GraphicsImages setCenter : центр ]; GraphicsImages . transform = CGAffineTransformMakeRotation ( M_PI / 2 ); [ graphicsArray insertObject : GraphicsImages atIndex : i ]; } я загрузил все изображение 22 размера (788x525) при загрузке самого представления. Затем на пальце салфетки я просто добавил изображение на просмотр.
Это отлично работает на iTouch, но в случае сбоев iPhone после появления около 12 изображений.
Вот как я добавил изображения, graphicsArray - NSMUTableArray.
GraphicsImages = [graphicsArray objectAtIndex:pageNo];
[self addSubview:GraphicsImages];
и на пальце салфетки я пишу, pageNo номер страницы, который будет отображаться.
GraphicsImages
Есть ли способ выпустить предыдущее загруженное изображение из подвидного представления, поскольку оно может храниться в стеке или связано с большим размером изображения ????
Пожалуйста, помогите мне в этой ситуации.
Заранее спасибо.
С уважением, Вишал.
Можете ли вы предоставить ошибку, которую вы получаете при сбое приложения? Знание того, какое исключение запускается, очень поможет в определении того, что происходит.
Я могу сказать, что вы не выпускаете for
переменную в своем for
цикле, так что это вызывает утечку памяти. Я полагаю, что этого недостаточно, чтобы вызвать крушение. В любом случае, сделайте следующее:
[ graphicsArray insertObject:GraphicsImages ];
[ GraphicsImages release ];
Обратите внимание, что вам не нужно указывать индекс вставки в вашем случае, потому что элементы будут добавляться последовательно. Кроме того, когда вы вставляете объект в массив, это значит retained
, что вы можете спокойно освободить его впоследствии.