NSArray (и другие контейнеры) поведение на dealloc - PullRequest
2 голосов
/ 29 марта 2009

Когда контейнеры Objective C освобождаются, они выпускают свои ссылки на объекты, которые они содержат, или мне нужно делать это вручную?

Ответы [ 4 ]

5 голосов
/ 29 марта 2009

Должен был прочитать документы по NSArray ближе:

Массивы поддерживают строгие ссылки на свое содержимое - в среде управляемой памяти каждый объект получает сообщение сохранения, прежде чем его идентификатор добавляется в массив, и сообщение об освобождении, когда он удаляется из массива или когда массив освобождается. Если вы хотите использовать коллекцию с другой семантикой владения объектом, рассмотрите возможность использования ссылки CFArray, NSPointerArray или NSHashTable.

0 голосов
/ 29 марта 2009

Когда вы добавляете объект, его счетчик ссылок увеличивается. Когда он удаляется (вянут вручную или когда массив уничтожается), его счетчик ссылок уменьшается.

Таким образом, при использовании следующего кода вам не нужно освобождать объект

NSObject* someObject = [[[SomeClass alloc] init] autorelease];
[someArray addObject: someObject];
0 голосов
/ 29 марта 2009

Они выпускают свои ссылки на объекты, которые они содержат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...