как предотвратить исчезновение UIImage после возобновления работы приложения из фона?(IPAD) - PullRequest
0 голосов
/ 26 июня 2011

У меня есть UIImage *loadedPoofSprite, который я инициализирую так:

NSMutableDictionary* loadedDictionary=[NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",Main_Bundle_Path,poofConfigFileName]];
NSString *textureFileName = [[loadedDictionary objectForKey:@"metadata"] valueForKey:@"textureFileName"];
loadedPoofSprite = [UIImage imageNamed:textureFileName]; 

poofImage = [[UIImage imageNamed:textureFileName] CGImage];

Оттуда я использую свой poofImage, и все выглядит нормально, пока мое приложение не возобновляет работу из фона. Я получаю сбой, потому что загружен. Я думал, что способ избежать этого будет сохранить загруженный PoofSprite следующим образом:

[loadedPoofSprite autorelease];
loadedPoofSprite = [[UIImage imageNamed:textureFileName] retain]; 

Это работает, но мне предложили, что это неправильный способ сделать это, и я должен в основном снова загрузить загруженный файл в приложении applicationWillEnterForeground. Я не понимаю, почему лучше загрузить его дважды, а не сохранять. Каков был бы правильный подход к решению вышеуказанного?

спасибо!

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Если вы сделаете loadedPoofSprite оставшимся свойством и назначите его следующим образом:

self.loadedPoofSprite = [UIImage imageNamed:textureFileName];

тогда все будет хорошо. Оставшееся имущество объявляется с использованием

@property (nonatomic,retain) UIImage *loadedPoofSprite;

и вам нужно сгенерировать метод получения / установки с использованием

@synthesize loadedPoofSprite;

Затем в подпрограмме dealloc добавьте self.loadedPoofSprite = nil;, чтобы освободить изображение при необходимости.

0 голосов
/ 26 июня 2011

Вы не указываете, что делаете с вашим loadedPoofSprite / poofImage. Возможно, проблема не связана с сохранением / выпуском: например, если вы добавляете изображение как подпредставление к другому представлению (через UIImageView), ваше изображение автоматически сохраняется платформой, поэтому сохранение его самостоятельно не требуется и может помешать выгрузка, когда это необходимо системе.

Действительно, вполне возможно, что ваше приложение, находясь в фоновом режиме, будет подвержено влиянию системы, пытающейся восстановить память в интересах другого запущенного приложения; в этом случае ваши представления будут освобождены, возможно, освобождены, и при возобновлении работы на переднем плане ваше приложение не найдет их. Отсюда и провал.

Если мои рассуждения применимы, вам нужно будет проверить, есть ли там ваши UIViews, и быть готовыми к их перезагрузке / воссозданию по мере необходимости (как указано в документации о didReceiveMemoryWarning/viewWillLoad/viewDidUnload).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...