Сбой памяти в iOS, но очень низкое потребление памяти - PullRequest
35 голосов
/ 12 мая 2011

Это раздражало меня долгое время.Мое приложение работает, занимая около 2,74 МБ памяти.Все в порядке.Но затем, когда он создает UIWebView, он загружается примерно до 5,87 МБ и продолжает падать.Это значения, указанные в разделе «Живые байты» в инструментах во время работы на моем iPad 1-го поколения.

Нет журнала сбоев, который я могу найти.Следующее из консоли:

MyApp[1205] <Warning>: Received memory warning. Level=1
MyApp[1205] <Warning>: applicationDidReceiveMemoryWarning
SpringBoard[30] <Warning>: Received memory warning. Level=1
MobileMail[1199] <Warning>: Received memory warning. Level=1
configd[26] <Notice>: jetsam: kernel memory event (95), free: 428, active: 1853, inactive: 1011, purgeable: 338, wired: 15122
configd[26] <Notice>: jetsam: kernel termination snapshot being created
com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x8966]) Exited: Killed: 9
com.apple.launchd[1] <Notice>: (UIKitApplication:com.MyApp.MyApp[0xdd4f]) Exited: Killed: 9
SpringBoard[30] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9
kernel[0] <Debug>: launchd[1207] Builtin profile: MobileMail (sandbox)
SpringBoard[30] <Warning>: Application 'MyApp' exited abnormally with signal 9: Killed: 9
configd[26] <Debug>: CaptiveNetworkSupport:UIAllowedNotifyCallback:70 uiallowed: false
ReportCrash[1206] <Error>: libMobileGestalt loadBasebandMobileEquipmentInfo: CommCenter error: 1:45
ReportCrash[1206] <Error>: libMobileGestalt copyInternationalMobileEquipmentIdentity: Could not get mobile equipment info dictionary
ReportCrash[1206] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2011-05-12-160645.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0

Я удалил все вызовы imageNamed, изменил автоматически высвобождаемые вещи для размещения / выпуска.Но я не могу понять, почему это происходит, и это сводит меня с ума.

Спасибо за любую помощь!

Ответы [ 3 ]

51 голосов
/ 22 мая 2011

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

Не очевидно, что вам нужно сделать, чтобы увидеть, что на самом деле использует ваше приложение, но как только вы сделаете это пару раз, вы 'запомним.

  1. Запуск с помощью инструмента производительности Allocations.
  2. Щелкните строку «Виртуальный трекер» в разделе «Распределения» (на снимке экрана)
  3. Нажмите «Снимок»Автоматически "

Тогда вы увидите свою грязную память (в настоящее время 20,34 МБ на моем скриншоте).

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

удачи!

This screenshot will help

22 голосов
/ 04 августа 2011

Я могу добавить две вещи, которые могут помочь:

  1. Как упоминалось в предыдущем ответе , битовый бит UIImage не учитывается в объеме памяти, который сообщает вам Утечка.ваше приложение использует!так что у вас может быть много UIImages, которые используют много покупки памяти, не отображаемой в общем.Я рекомендую использовать Allocations для проверки количества объектов UIImage, созданных и уничтоженных во время работы вашего приложения.
  2. Как упоминалось в в этом ответе используйте следующий код

    -(void) report_memory {
        struct task_basic_info info;
        mach_msg_type_number_t size = sizeof(info);
        kern_return_t kerr = task_info(mach_task_self(),
                                       TASK_BASIC_INFO,
                                       (task_info_t)&info,
                                       &size);
        if( kerr == KERN_SUCCESS ) {
            NSLog(@"Memory in use (in bytes): %u", info.resident_size);
        } else {
            NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
        }
    }
    

, чтобы увидеть объем памяти, выделенный операционной системой вашему приложению.Это более точное число в памяти, которую использует ваше приложение.(Вам нужно #import "mach / mach.h")

ура!

0 голосов
/ 23 июля 2013

Вы нажимаете эту кнопку меню 2 раза быстро, вы увидите, что приложение нажимает на x для всех приложений, затем открывает те, которые вам нужны.

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