Можливі дублікати:
Управління пам'яттю какао NSArray з об'єктами
Я маю NSMutableArray заповнені деякими об'єктами.
Наприклад:
...
id test = [NSObject new];
NSMutableArray *myArray = [NSMutableArray new];
[myArray addObject: test];
...
Коли більш ніж один об'єкт потребує посилання на цей масив, я не можу просто скористатися методом "- removeAllObjects". Тому я використовую лише випуск масиву в моєму методі "- dealloc" моїх власних класів.
- (void)dealloc {
[myArray release];
[super dealloc];
}
Отже, мій об'єкт з назвою "тест" просочився і тому мені потрібно більше робити?
Я не міг знайти відповіді в документації,це не має сенсу для методу "dealloc" або "release" для NSMutableArray. А в посиланні NSObject вони не описують NSMutableArray. Може бути, це де-небудь в "Керівництві з програмування керування пам'яттю" (сподіваюся, що так).
Відповіді:
3 для відповіді № 1Випускайте тільки те, що ви володієте, будь-то шляхом виділення, нового, збереження або копіювання.
Ви володієте тестом після цього
id test = [NSObject new];
тому ви несете відповідальність за її випуск, незалежно від того, додаєте ви його до масиву чи ні.
Якщо ти зробиш
id test = [[NSObject new] autorelease]; // or any autoreleased convenience methods
ви вже відмовилися від власності на тест, тому ви не повинні випускати його, навіть якщо ви помістіть його в масив або іншу форму колекції. Колекція набуде права власності.
Вам потрібно лише звільнити те, що ви володієте.
5 для відповіді № 2
Контейнери зберігатимуть предмети, що містятьсяі звільнити їх, коли контейнер буде знищений або об'єкти видалені з них. Ви повинні звільнити об'єкти після їх додавання до контейнера (оскільки вони зберігаються контейнером, тому вам більше не потрібно їх зберігати).