(iphone) мое приложение получает предупреждение памяти, когда инструменты показывают "все выделения" только 7 МБ? - PullRequest
2 голосов
/ 10 января 2011

как говорится в вопросе, он умирает в 7 МБ ..

Это нормально? (7mb ..)
Прибор показывает отсутствие утечек.

Спасибо

  • EDIT

отредактировано 17mb -> 7mb. Я уменьшил использование памяти, удалив ненужный пул, который я выделял.

Тем не менее, он получает предупреждение памяти в 7 МБ .. По сути, я создаю изображения и выпускаю их постоянно, когда появляется предупреждение.

Я делаю много

- (UIImage*) allocImage
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    UIImage* uiImage = [UIImage imageWithData: imageData];
    UIImage* changedImage = [uiImage changeColor: self.currentColor];
    uiImage = changedImage;
    [uiImage retain];
    [pool release];

    return uiImage;
}

и освобождение полученного изображения (инструменты показывают, что память увеличивается на 2-3 МБ и возвращается к 7 МБ)

Каждое изображение занимает 1 Мб памяти, и к тому времени, когда приложение получит предупреждение, мне, вероятно, нужно создать / уничтожить изображение примерно 100 раз.

  • Редактировать 2

нашел похожий случай, но решения там нет ..

Мое приложение iphone получает предупреждение памяти и убито на 6,8 МБ
Предупреждение о памяти, но небольшие байты

Может быть, мне стоит перенести "создание UIImage" в код на c / c ++? чтобы мне не пришлось беспокоиться о загрузке многих изображений? Интересно, если это возможно.
Или, может быть, использовать пул памяти для изображений, так как размер изображения одинаков.

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Это зависит от множества факторов, рассматриваемого устройства, версии iOS, того, что еще происходит на устройстве одновременно, и т. Д. В основном, вы должны серьезно относиться к предупреждениям, когда они приходят. Получение предупреждений не проблема. Ничего не делать, когда их получаешь - плохая идея.

По моему опыту, 17Mb находится на нижней стороне от нормального.

1 голос
/ 10 января 2011

Да, это нормально.Но работать с памятью на устройствах iOS немного сложнее.

Во-первых, вы должны знать объем доступной памяти - вы можете найти некоторый исходный код в http://adeem.me/blog/2009/04/01/get-the-amount-of-free-memory-available/.Затем сделайте несколько итераций без выделения с размером меньше, чем было измерено (это действие заставляет другие приложения освободить память).После этого снова измерьте доступную память, и вы будете удивлены - объем доступной памяти вырос.

...