Утечки памяти в моем приложении - PullRequest
0 голосов
/ 16 сентября 2011

Я работаю над приложением IOS. В XCode я бы проанализировал приложение. Выполнить -> проанализировать. Он показал 47 потенциальных утечек памяти. Я проверил все случаи, в большинстве случаев невозможно освободить память,Есть ли проблемы при запуске приложения в AppStore?Я тщательно проверил приложение, оно нигде не падает и нигде не показывает предупреждение о нехватке памяти.Поскольку я новичок в разработке IOS, пожалуйста, предложите мне, что я могу сделать с этим

Будет ли достаточно освободить память в методе viewDidUnload, чтобы избежать утечек памяти?

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

Примечание: у меня не было возможности поиграть с некоторыми из новейших функций, таких как ARC, так что это может или не может быть устаревшим сейчас.

Да, это может бытьвопрос.По словам Apple, это одна вещь, которую они проверяют.Однако ничто не может гарантировать отклонение (или принятие) группой проверки Apple.Возможно, еще важнее то, что вы хотите, чтобы ваша репутация разработчика приложений была хорошей, вы хотите, чтобы телефоны людей работали для них лучше .

Готово, вывсегда будет освобождать любые объекты, которые вы создали с помощью new или alloc.

Однако для предотвращения, отслеживания и устранения утечек памяти вам необходимо использовать:
1. анализ
2. Утечки инструментов
3. Ваш собственный анализ и рецензирование при необходимости
4. Чистое кодирование, лучшие практики и шаблоны

При использовании инструмента профилирования утечек инструментов, используйте свое приложение и попробуйте найти разные пути выполнения.,Посмотрите, не выглядят ли объекты как протекающие.Я обычно расставляю приоритеты по общему размеру утечки (размер объекта * количество утечек), затем работаю до тех пор, пока утечки не обнаружатся.Нажатие на объект покажет вам где-то место, где объект изначально выделен.

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

Еще один прием, который может помочьВ этой связи необходимо продумать некоторые «петли», которые вы можете создать в своем приложении, и когда вы вернетесь «домой», ваше приложение должно иметь такой же объем памяти, как в прошлый раз, когда вы были там.Например, начните с домашнего экрана, выполните действие X, затем действие Y, затем вернитесь к домашнему экрану.Допустим, вы ожидаете, что после первого цикла, во 2-й и 3-й раз, когда вы вернетесь к начальному экрану, отпечаток памяти должен быть одинаковым.Затем вы можете попрактиковаться в этом с подключенными приборами и количеством выделений .Это может дать вам некоторую ценную информацию.

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

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

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

2 голосов
/ 16 сентября 2011

Он не может быть отклонен, если он не показывает никаких предупреждений памяти. Но создание приложений с утечками, как правило, не очень хорошее программирование. Почему вы не решаете эти утечки? Не существует ни одной ситуации, когда вы не сможете освободить свои ассигнования. Используйте авто-релиз или передайте сообщение о выпуске элементам, где это необходимо.

Кроме того, для лучшего анализа вашего приложения, запустите приложение с INSTRUMENTS, это даст вам лучшее представление о том, откуда происходят утечки.

РЕДАКТИРОВАТЬ: Как запустить приложение с инструментами.

Когда вы находитесь в Xcode, нажмите Run в верхней строке меню. В этом разделе перейдите к Запустить с Performance Tools и выберите Leaks .

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

1 голос
/ 16 сентября 2011

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

Какую информацию возвращает Analyze?

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