Есть ли утечка памяти в iOS? - PullRequest
6 голосов
/ 19 февраля 2011

Я новичок в Objective-C (из Java) и думаю, что довольно хорошо понимаю управление памятью. Но когда мое приложение загружается, я получаю очень маленькую утечку памяти, которая происходит только во время загрузки игры (мы говорим от 32 до 512 байт).

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

Информация, которую я получаю от отладчика, никогда не бывает прежней. Иногда это «ответственный кадр» приложения UIA, иногда это [UIWindow makeKeyAndVisible], а иногда [UNibDecoder].

Является ли это ниже "принятым" пределом, или приложение не должно течь ВСЕ? Это мое первое "большое" приложение. Я сделал небольшое приложение с переворотом, и там, где нет утечек, что когда-либо ..

С другой стороны, как лучше всего определить утечки?

Ответы [ 2 ]

10 голосов
/ 19 февраля 2011

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

Статический анализатор LLVM может найти некоторые из этих проблем для вас. Очистите свою сборку, затем выберите Build and Analyze в меню Build. В инструментах также есть шаблон Leaks.

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

4 голосов
/ 19 февраля 2011

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

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

Я часто испытываю стресс-тесты своих приложений, умышленно «пропуская» несколько мегабайт во время запуска приложения и проверяя работоспособность приложений. Некоторые из этих приложений были одобрены для распространения в App Store с этим утечкой тестового кода, который все еще случайно оставлен включенным (mia culpa!). Но это показывает, что утечка даже нескольких МБ не является проблемой для утверждения приложения (если этого недостаточно для аварийного завершения работы вашего приложения при тестировании с нехваткой памяти).

...