утечка в установщике @property - PullRequest
       25

утечка в установщике @property

2 голосов
/ 20 сентября 2011

У меня есть пользовательский UIView, который я добавляю как подпредставление в нескольких местах моего приложения.Я посылаю представление NSMutable Array, устанавливая свойство, и оно отображает график заметок.Это прекрасно работает, за исключением одного просмотра в моем приложении.Я использую этот код в разделе viewDidLoad каждого представления, содержащего график.

endNoteDisplay =[[NoteDisplay alloc] initWithFrame:CGRectMake(0,0,320,180)];
endNoteDisplay.tag = 100;
endNoteDisplay.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Note_Bkg.png"]];
NSMutableArray *tmpNts = [[NSMutableArray alloc] initWithObjects: @"C", @"E", @"G", @"A",nil];
endNoteDisplay.noteSpread = tmpNts;
[tmpNts release];
[self.view addSubview:endNoteDisplay];
[endNoteDisplay release];
  • Если я удаляю строку endNoteDisplay.noteSpread = tmpNts;, все работает нормально, без утечек.

  • Если я оставлю это в Instruments, это показывает утечку памяти.Утечка происходит, когда я покидаю текущий вид (где я отображаю заметки) и возвращаюсь к предыдущему виду (у него есть таблица со списком различных параметров заметок, которые будут отображаться).

  • Мое приложение работает, как и ожидалось, и это единственная утечка.

Кто-нибудь может сказать мне, почему это вызывает утечку?свойство noteSpread в моем NoteDisplay установлено на nonatomic retain.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

Выпускает ли метод -dealloc в NoteDisplay свойство noteSpread?

1 голос
/ 20 сентября 2011

В dealloc NoteDisplay вам нужно отправить релиз в переменную экземпляра, которая поддерживает noteSpread.

0 голосов
/ 20 сентября 2011

Вы можете использовать этот оператор объединения:

endNoteDisplay.noteSpread = [NSMutableArray arrayWithObjects: @"C", @"E", @"G", @"A",nil];

, который устранит эти 2 строки,

NSMutableArray *tmpNts = [[NSMutableArray alloc] initWithObjects: @"C", @"E", @"G", @"A",nil];
endNoteDisplay.noteSpread = tmpNts;

, а также устранит утечку:

просто не забудьте выпустить «noteSpread» в контроллере, когда закончите свою работу.

...