2013-06-26 3 views
1

Я пытаюсь понять, что говорит мне инструмент Allocations в Xcode. Я использую ARC. У меня есть следующие методы в DetailViewController моего мастер-деталь приложения:Почему эта функция вызывает утечку?

- (FFMasterViewController*) masterViewController 
{ 
    return (FFMasterViewController*)[[self.splitViewController.viewControllers objectAtIndex:0] topViewController]; 
} 

- (SQLDataController*) sqlDataController 
{ 
    return self.masterViewController.dataController; 
} 

Первый метод, кажется, хорошо. Но второй, согласно Allocations, вызывает 100,0% утечки памяти. dataController - это ivar в моем MasterViewController. Я написал оба метода, чтобы было удобно обращаться к MasterViewController и DataController из методов в моем DetailViewController. Я могу показать больше кода, но я не уверен, что посмотреть дальше, чтобы найти утечку. Я не понимаю, как вернуть указатель в одном случае, но в другом случае возникает утечка.

+0

Возможно, мне нужно добавить, что как masterViewController, так и sqlDataController определены как свойства только для чтения в моем DetailViewController. Я показываю методы доступа для каждого из этих свойств. –

+0

Можете ли вы показать объявления свойств для 'masterViewController' и' dataController'? –

+0

@property (readonly, nonatomic) FFMasterViewController * masterViewController; –

ответ

2

Сообщается вам, где утечка была выделена, а не то, что вызывает утечку.

Поскольку вы используете ARC, скорее всего, у вас есть цикл сохранения где-то.

Если вы посмотрите на инструменты распределения, вы можете включить «подсчет событий отслеживания дорожек» и «только отслеживать прямые выделения», тогда вы можете погрузиться и увидеть все события сохранения/выпуска на пропадаемых объектах.