Предотвращение, нахождение и удаление утечек памяти в Какао

С помощью Java 8 вы можете использовать метод format ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • f используется для значения floating точки.
  • 2 после десятичного знака, число десятичных знаков после .

Для большинства версий Java вы можете использовать DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));
19
задан 3 revs, 2 users 100% 10 November 2008 в 15:01
поделиться

8 ответов

В XCode 4.5 используйте созданный в Статический Анализатор .

В версиях XCode до 3,3, Вам, возможно, придется загрузить статический анализатор. Эти ссылки показывают Вам как:

Использование Статический Анализатор LLVM/Clang

, Чтобы постараться не создавать утечки памяти во-первых, используйте Лязг, Статический Анализатор к - неудивительно - анализирует Ваш C и код Objective C (никакой C++ все же) на Mac OS X 10.5. Это тривиально, чтобы установить и использовать:

  1. Загрузка последняя версия от эта страница .
  2. От командной строки, cd к Вашему каталогу проекта.
  3. Выполняются scan-build -k -V xcodebuild.

(Существуют некоторые дополнительные ограничения и т.д., в особенности необходимо проанализировать проект в его конфигурации "Отладки" - видят http://clang.llvm.org/StaticAnalysisUsage.html для деталей - но это более или менее, к чему он сводится.)

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

, Если Ваш проект не предназначается для рабочего стола Mac OS X, существует несколько других деталей:

  1. Набор Основа SDK для Всех Конфигураций к SDK, который использует настольные платформы Mac OS X...
  2. Набор Сборка Командной строки для использования Настройки отладочного процесса.

(Это - в основном тот же ответ относительно этот вопрос .)

21
ответ дан 30 November 2019 в 02:07
поделиться

Всегда используйте методы доступа; объявите свойства использования средств доступа

, Вы делаете жизнь намного более простой для себя, если Вы всегда используете методы доступа присвоить значения переменным экземпляра (кроме init* и dealloc методы). Кроме обеспечения, что любые побочные эффекты (такой как уведомления об изменении KVO ) правильно инициированы, это делает это гораздо менее вероятным, что Вы перенесете копию-и-вставку или некоторую другую логическую ошибку чем при разбрызгивании кода retain с и release с.

При объявлении средств доступа, необходимо всегда использовать Objective C 2 свойства функция. Объявления свойства делают семантику управления памятью средств доступа явной. Они также обеспечивают простой способ к Вам перепроверить с Вашим dealloc метод, чтобы удостовериться, что Вы выпустили все свойства, которые Вы объявили как retain или copy.

10
ответ дан 30 November 2019 в 02:07
поделиться

Не сверхдумайте управление памятью

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

фундаментальные правила очень просты. Необходимо сконцентрировать только на следующем их. Не волнуйтесь о том, что другие объекты могли бы сделать, или что сохранить количество имеет Ваш объект. Положите, что все остальные соблюдают тот же контракт, и он будет все Просто Работать.

, В частности, я повторю точку о не волнении по поводу сохранить количества Ваших объектов. Само сохранить количество может вводить в заблуждение по различным причинам. Если Вы регистрируете сохранить количество объекта, Вы почти наверняка возглавляете вниз неправильный путь. Отступите и спросите себя, Вы следуете фундаментальным правилам?

16
ответ дан 30 November 2019 в 02:07
поделиться

Инструмент Instruments Leaks довольно хорош в нахождении определенного класса утечки памяти. Просто используйте, "Запускаются с Инструмента Производительности" / пункт меню "Leaks" для автоматического запуска приложения через этот инструмент. Работы для Mac OS X и iPhone (средство моделирования или устройство).

инструмент Leaks помогает Вам найти источники утечек, но не помогает отнести такое отслеживание, где пропущенная память сохраняется.

8
ответ дан 30 November 2019 в 02:07
поделиться
  • Следуют правилам для сохранения и выпуска (или используйте Сборку "мусора"). Они получены в итоге здесь .

  • Инструменты Использования для разыскивания утечек. Можно запустить приложение под Инструментами при помощи Сборки>, Запускаются С Инструмента Производительности в XCode.

6
ответ дан 30 November 2019 в 02:07
поделиться

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

http://www.omnigroup.com/developer/omniobjectmeter/

2
ответ дан 30 November 2019 в 02:07
поделиться

Можно создать бета порт Valgrind отсюда: http://www.sealiesoftware.com/valgrind/

Это намного более полезно, чем какой-либо статический анализ, но еще не имеет никакой специальной поддержки Какао, что я знаю о.

1
ответ дан 30 November 2019 в 02:07
поделиться

В первую очередь, жизненно важно, чтобы Ваше использование [] и {} скобки и заключили в фигурные скобки, соответствуют универсальному стандарту. Хорошо, просто ребячество'.

При рассмотрении утечек, можно предположить, что утечка происходит из-за проблемы в коде, но это не составляет 100% отказа. В некоторых случаях может быть что-то происходящее в Apple (удушье!) код, который виновным. И это может быть что-то, что это твердо найти, потому что это не обнаруживается как выделяемые объекты какао. Я сообщил об ошибках утечки к Apple в прошлом.

Утечки иногда трудно найти, потому что подсказки, которые Вы находите (например, сотни пропущенных строк) могут произойти, не потому что те объекты, непосредственно ответственные за строки, протекают, но потому что что-то протекает тот объект. Часто необходимо вырыть через листы и ответвления протекающего 'дерева' для нахождения 'корня' проблемы.

Предотвращение: Одно из моих основных правил состоит в том, чтобы действительно, действительно, действительно стараться не когда-либо выделять объект, просто не автовыпуская его тут же на месте. Где угодно то, что Вы alloc/init, объект и затем выпускает его позже вниз в блоке кода, являетесь возможностью для Вас сделать ошибку. Или Вы забываете выпускать его, или Вы выдаете исключение так, чтобы выпуск никогда не называли, или Вы помещаете оператор 'возврата' для раннего выхода где-нибудь в методе (что-то, чего я стараюсь избегать также).

1
ответ дан 30 November 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: