Objective-C определить, какие объекты сохраняют другой объект - PullRequest
1 голос
/ 07 ноября 2010

У меня есть некоторые проблемы с утечками памяти на iPhone (представьте себе), и у меня есть пользовательский объект со счетом сохранения 10.

Есть ли способ узнать, какой код вызвал увеличение количества сохраненных файлов для конкретного экземпляра объекта? Я использую GHUnit, если это имеет значение.

Ответы [ 4 ]

3 голосов
/ 07 ноября 2010

Попробуйте использовать Build & Analyze. Обычно он может сказать вам, если объект удерживается и не освобождается ./

2 голосов
/ 07 ноября 2010

Счет сохранения почти бесполезен - если что-то получает retain ed и autorelease d в утверждении, это прекрасно, но его счет увеличится на 1.

Если вы хотите найтиточно, где конкретный объект retain ed, переопределите реализацию класса retain для проверки ваших объектов и установите там точку останова:

@implementation MyClass
-(id) retain
{
    if(self == ObjectThatImTracking)
        NSLog(@"[ObjectThatImTracking retain]\n");  // put a breakpoint here
    return [super retain];
}

Затем запустите вашу программу в отладчикеи посмотрите на стек вызовов при достижении точки останова.

2 голосов
/ 07 ноября 2010

Инструмент утечки (один из «инструментов» в XCode) способен анализировать подобные вещи, но я не думаю, что вы можете сделать это программно.

Вот отличное руководство: http://mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

(Обновление для суммирования комментариев): если вы хотите установить точку останова в методе сохранения (для просмотра трассировки стека), вы можете переопределить метод сохранения.

0 голосов
/ 07 ноября 2010

Вы пытались найти все сохраняемые случаи вашего класса в модулях?Мэйби, это помогает ..

...