Насколько важно управление памятью в Objective-C? - PullRequest
3 голосов
/ 06 июня 2010

Справочная информация: Я (вскакивая на подножку и) начинаю изучать разработку для iPhone / iPad и Objective-C. У меня большой опыт в веб-разработке, и большая часть моего программирования выполняется на javascript (без библиотек), Ruby и PHP.

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

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

B) Если я сделаю NSString для заголовка вида, скажем, и забуду его освободить, разве это станет проблемой, только если я повторно создаю эту строку повторно? Я представляю, что я делаю, создавая служебную память, необходимую для хранения этой строки, так что это, вероятно, довольно неудобно (несколько байтов?) Однако, если у меня есть быстрый цикл цикла в игре, которая «пропускает» int каждый цикл или что-то такое, что довольно быстро переполнило бы приложение. Верны ли эти предположения?

Извините, если это не до аллеи вики-сообщества, я просто пытаюсь понять, как думать о памяти и насколько мне нужно быть осторожным. Любые анекдоты или приложения, представленные в App Store, также были бы потрясающими.

Ответы [ 5 ]

5 голосов
/ 06 июня 2010

Я читал курсы по разработке Какао, и управление памятью - это второе, что я преподаю (первое - указатели на Си). Мой опыт показывает, что если программист Какао не понимает управление памятью, то он никогда не станет большим программистом Какао.

Другими словами, научитесь управлению памятью. Вы не пожалеете об этом.

4 голосов
/ 06 июня 2010

Следуйте шаблонам, а управление памятью редко является самым большим препятствием в какао.

Однако я собираюсь быть здесь противоположностью: ваше чувство в основном верно.Утечка одной строки NSString, используемой в качестве метки, никому не повредит.У большинства приложений любой сложности в мире есть несколько синглетов, которые держат состояние в течение всей жизни приложения, и это тоже нормально (ну, лучше, потому что это явно).Так что нет, случайная утечка струны не убьет вас.Тем не менее, большие утечки (изображения, текстуры, данные содержимого файлов) причинят вам вред - Apple не гарантирует минимальный или детерминированный объем памяти для вашего процесса на платформе iPhone OS, поэтому одна или две из этих утечек могут привести кпользователи видят частые «сбои» в поле, которое вы не всегда видите во время разработки.

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

3 голосов
/ 06 июня 2010

Вы должны никогда утечка памяти.

Учтите: сегодня вы пишете некоторый код, который теряет память только один раз во время выполнения программы. Завтра вы повторно используете этот код другим способом, и он выполняется много раз. Утечка тогда проблематична. Найти эту утечку может быть очень сложно. Гораздо сложнее, чем всегда освобождать свою память при первом написании кода.

Спасите себя и других от головной боли в будущем: всегда освобождайте свою память.

1 голос
/ 06 июня 2010

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

Эта тема ранее также обсуждалась здесь: Инструменты обнаружения утечки памяти в XCode

0 голосов
/ 06 июня 2010

важнее самой жизни: p

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

Через некоторое время оно становится второй натурой.

http://theuntitledblog.com/2010/05/25/objective-c-memory-management-rules/ http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html

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