2015-10-12 4 views
11

Когда я запускаю мое приложение с Xcode, то ясно, что у меня есть утечка памяти:Xcode показывает утечку памяти, но инструменты не

enter image description here

Когда я представляю обычай ViewController увеличения памяти, но когда я его отклоняю, он не возвращается.

Так что я также проверил с помощью приборов инструмент выделения, но это говорит о другом:

enter image description here

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

Я проверил свой код не менее 15 раз, и я лично не могу найти утечки памяти и, таким образом, согласиться с инструментами. Я также реализовал deinit функцию во всех своих объектах, которые будут получать выделенные таким образом:

deinit { 
    print("Deinnited \(id)") 
} 

И все объекты, напечатанные на консоль, как и ожидалось.

Что может быть? Я использую:

  • IOS 9.0
  • XCode версии 7.0 (7A220)
  • Swift 2,1

Обе схемы для прогона и профиля в "отлаживать"

+0

Просто проверяйте, но как вы отклоняете взгляды? Также есть время простоя? Я обнаружил, что инструменты имеют тенденцию показывать только программную сторону. Он не покажет вам барана, который еще не очищается. Когда нет времени простоя, ОС не может очистить RAM. У вас есть синглтон? или общий экземпляр для обналичивания? Вероятно, сильный ссылочный цикл. Попробуйте настроить материал на слабый. Просто бросая идеи вокруг ... –

+0

Если вы повторяете open-close несколько раз, вы видите увеличение потребления памяти в Xcode? – Darko

+0

@ Darko да. Я вижу растущее потребление памяти в Xcode, но не в инструментах –

ответ

3

После долгих исследования в Google и других форумах, похоже, это ошибка с XCode.

+0

Это все еще ошибка в Xcode начиная с версии 7.2.1. –

2

Обновление предыдущего текста после использования опыта использования.

enter image description here

После недавних экспериментов с использованием инструментов в Xcode 7.2.1, я заметил, что Утечки графики не всегда работают. После убийства процесса Инструменты и симулятора снова запустите ... появилась диаграмма. Кажется, что проблема прерывистая и пока не найдена причина.

enter image description here

+0

Это не показало проблемы для меня. Мне удалось профилировать шаблон профиля Leaks, и я обнаружил, что утечки не возникали, так как я продолжал проверять утечку по пути, который проходил каждый раз. Там определенно что-то не так с встроенным профилировщиком памяти Xcode 7.x. Инструменты показывают, что «Persistent Bytes» остается стабильным в течение всего срока действия приложения, в то время как «Total Bytes» продолжает расти. Я предполагаю, что они используют неправильное поле в Xcode, поскольку это число очень близко к значению «Всего байтов», показанному при профилировании в Инструментах. –

+0

После недавних экспериментов с использованием инструментов в Xcode 7.2.1 я заметил, что график утечек не всегда работает. После убийства процесса Инструменты и симулятора снова запустите ... появилась диаграмма. Кажется, что проблема прерывистая и пока не найдена причина. –

5

Это очень раздражает Xcode ошибка или, может быть, особенность :), если посмотреть на это с точки зрения яблок.

Я столкнулся с этим сегодня и вот как его решить.

  1. Нажмите название приложения, где вы установили схему (рядом с кнопкой остановки в Xcode)

  2. Выбрать «редактировать схему»

  3. Выбрать «бежать» (левая сторона популярности -до окно)

  4. Выбрать «опции» (верхняя часть во всплывающем окне)

  5. Снимают «Enabl (последний выбор вам нужно прокрутить вниз)

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

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

/Anders.

+0

Черт ... Большое спасибо @ Andres Cedronius – user1872384

Смежные вопросы