Обработка ошибок памяти в iPhone - PullRequest
1 голос
/ 07 мая 2010

Я бы хотел обработать ошибки нехватки памяти в iPhone, чтобы выполнить логику с меньшими требованиями к памяти в случае, если у меня не хватит памяти. В частности, я хотел бы сделать что-то очень похожее на следующий псевдокод:

UIImage* image;
try  {
    image = [UIImage imageNamed:@"high_quality_image.png"];
} catch (OutOfMemoryException e) {
    image = [UIImage imageNamed:@"low_quality_image.jpg"];
}

Сначала я пытаюсь загрузить высококачественное изображение, и если мне не хватает памяти, то я использую изображение более низкого качества.

Возможно ли это? Существует ли какое-либо исключение или уведомление, которое может быть обработано при возникновении ошибки нехватки памяти?

Предупреждение о нехватке памяти - это не то, что я ищу, так как оно получено до в телефоне не хватает памяти. Я хотел бы знать, не сработала ли логика, которую я выполняю, из-за ошибки нехватки памяти, и соответственно с этим справиться.

Кроме того, что-то подобное может также помочь:

UIImage* image;
if (enoughMemory) {
    image = [UIImage imageNamed:@"high_quality_image.png"];
} else {
    image = [UIImage imageNamed:@"low_quality_image.jpg"];
}

Ответы [ 3 ]

3 голосов
/ 07 мая 2010

вот ответ, который даст вам текущую память, используемую вашим приложением, и вы можете решить, что делать на основе этой информации.

Использование памяти iphone

0 голосов
/ 07 мая 2010

Редактировать: похоже, это был не совсем ответ на ваш вопрос.


Что вы пытаетесь сделать со своими изображениями?Некоторые действия, такие как сохранение полноразмерного изображения, возвращенного из контроллера средства выбора изображений, особенно загружены пользователями памяти.

Что бы я порекомендовал делать, всегда предполагая, что вам всегда нужны изображения наименьшего размера, и:

  1. Если вам понадобится изображение с высоким разрешением позже, кэшируйте его на диск.
  2. Все изображения для отображения должны иметь минимальное разрешение, которое вы можете выбрать.
  3. Если вам нужно изображение с высоким разрешением, извлеките его из кэша.
  4. Используйте предупреждения о нехватке памяти в качестве знака, чтобы выпустить любые изображения, которые у вас есть в памяти, но не видны.

Теперь, возможно, эта ситуация не будет работать для вас.Чтение и запись больших изображений на диск на iPhone происходит медленно.Если это тот случай, вам нужно следовать предложению @fbrereto: загрузить большое изображение, следить за предупреждениями в памяти, а если оно у вас появится, сбросить его и загрузить маленькое изображение.

Вы определенно не должныне игнорируйте предупреждения памяти, но если вы не ответите на одно из них, это не обязательно приведет к сбою приложения.Мой iPhone 3G будет получать предупреждения о памяти почти каждый раз, когда я получаю изображение с UIImagePickerController, и я ничего не могу с этим поделать.

0 голосов
/ 07 мая 2010

iPhone имеет предупреждение о нехватке памяти, которое срабатывает при достижении определенного порога памяти.Этот обратный вызов выдается приложению и должен быть соответствующим образом отреагирован, иначе ваше приложение рискует быть прерванным операционной системой.Тогда для вашего приложения было бы неплохо преобразовать образы с большим объемом памяти в образы с большим объемом памяти.

Здесь следует соблюдать осторожность, поскольку размер файла на диске не обязательно является репрезентативным.о том, сколько памяти он будет использовать после загрузки и подготовки к использованию на устройстве.

См. здесь для получения дополнительной информации об обработке предупреждений о нехватке памяти.

...