Я проверяю keepCount для подсмотра после добавления в представление. код:Addsubview и dealloc для утечек памяти (retainCount)
- (void) loadView{
//...
toolbar = [[UIToolbar alloc] initWithFrame:nil];
[[self view] addSubView:toolbar];
}
- (void) dealloc{
NSLog(@"count=%d", [toolbar retainCount]); // count=2
[toolbar removeFromSuperView];
NSLog(@"count=%d", [toolbar retainCount]); // count=1
[toolbar release]
NSLog(@"count=%d", [toolbar retainCount]); // count=1
toolbar = nil;
NSLog(@"count=%d", [toolbar retainCount]); // count=0
}
Из этого кода в dealloc {}, у меня есть несколько вопросов:
1, первый журнал retainCount на панели инструментов 2, поскольку панель инструментов после инициализации и добавил к себе зрения, retaincount будет до 2.
2, После того, как панели инструментов removeFromSuperView, то retainCount станет равным 1.
3, После того, как панель инструментов вызвать метод освобождения, retainCount еще один, он не может станет 0. В моих вариантах, потому что супер просмотр остается панель инструментов (самоопределение не выпускается), поэтому панель инструментов не может перезагрузиться до 0.
4, Если вызов панели инструментов установлен на нуль, значение keepCount будет равно 0. Этот журнал бесполезен.
Мои вопросы:
а) на панели инструментов вызовите removeFromSuperView и релиз API, результат тот же, панель инструментов retainCount только станет равным 1. Таким образом, если я проверить код использовать только каждый из них , результат будет таким же. Итак, могу ли я заключить, что пользователь может только назвать каждый API в порядке?
b) Из документа яблока подъярус добавляется в представление о себе, само представление остается дескриптором панели инструментов, поэтому в методе dealloc, если viewDidUnload не вызывается, панель keepCount не может быть уменьшена до 0. Если память невелика, система уменьшит ненужное представление и вызовет метод viewDidUnload, он автоматически уменьшит панель toolCount до 0. Таким образом, в методе dealloc я должен установить панель на нуль. Я запутался, если я установил панель инструментов в нуль, когда вызывается метод viewDidUnload, панель инструментов будет уменьшена или нет? Происходит ли утечка по меторике?
Thx.
Но для памяти subview, когда subview будет выпуском релиза, он должен вызывать только низкую память и метод viewDidUnload? – Golden
Тест в приборах для утечки памяти. Проверка таких показателей не даст вам ничего. – danielbeard
Вы никогда не должны использовать 'keepCount': http://stackoverflow.com/questions/11028512/addsubview-and-dealloc-for-memory-leaks-retaincount#comment14420031_11028512 – rckoenes