Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Циклическое  владение Objective-C

0

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

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

«на заднем плане» вашего кода и системы. Однако наша программа запускается и завершает работу очень, очень быстро. Чтобы получить время для профилирования, включите в конец функции main() вызов sleep() с паузой на сотню секунд:

Рис 20.2. Выбор профилировщика

}

sleep(100);

return 0;

}

Рис. 20.3. Инструмент Allocations

Выполните в меню Xcode команду Product→Profile; запускается программа

Instruments. Выберите в списке инструментов профилирования режим Leaks.

В ходе выполнения программы вы наблюдаете за текущим положением дел. На левой панели находятся два инструмента (рис. 20.3). Щелчок на инструменте Allocations отображает гистограмму памяти, выделенной в куче.

Например, из рисунка видно, что в куче остались 10 экземпляров Asset.

Чтобы найти в программе циклическое владение, переключитесь на инструмент Leaks и выберите представление Cycles из строки меню над таблицей. При выборе конкретного цикла отображается его диаграмма объектов (рис. 20.4).

Рис. 20.4. Инструмент Leaks

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии