Утечки памяти разрушают мое приложение? - PullRequest
0 голосов
/ 21 апреля 2011

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 21 апреля 2011

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

Вот хороший урок. http://mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

3 голосов
/ 21 апреля 2011

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

Утечка напрямую не приведет к сбою . Утечки могут косвенно вызывать сбои, если у вас не хватает памяти в результате не освобождения большого количества объектов. Однако, если ваши сбои происходят и в симуляторе, это почти наверняка не так (симулятор имеет гораздо больше доступной памяти, чем устройство). Как говорит Даниэль, вы можете использовать инструмент, чтобы выяснить, что происходит.

Другим хорошим методом является использование статического анализатора XCode - он позволяет анализировать ваш код и обнаруживать наиболее распространенные утечки.

Теперь, если ваше приложение дает сбой и оно не из-за утечки памяти (вы сможете сказать это, потому что у вас будут предупреждения на память, выводимые на консоль), тогда скорее всего ваша проблема не утечка Возможно, это плохой доступ (вы превышаете освобождение), и в этом случае ваш инструмент утечки инструментов не поможет вам.

0 голосов
/ 22 апреля 2011

Вы также можете создать + проанализировать свое приложение в самом XCode (Cmd + Shft + A или Product> Analyse).Это покажет вам более очевидные утечки.

0 голосов
/ 21 апреля 2011

Если вам нужно выяснить утечки и источник сбоя.вы можете попробовать эти

  1. попытаться найти как можно больше утечек из Инструментов и исправить
  2. установить NSZombieEnabled для ваших исполняемых параметров и аварийного завершения приложения.
  3. изменить все вашиобъекты autorelease для максимально возможного использования alloc init.

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

...