2013-05-14 3 views
0

У меня есть NSMutableSet спрайтов, каждый из которых объявленную таким образом:Что происходит при удалении unretained объектов из NSMutableSet

SpriteEntity * newProjectile = [CCSprite spriteWithFile:@"tiles.png" rect:CGRectMake(48,0,16,16)]; 

Теперь они хранятся в NSMutableSet, который сохраняется (создается вызовом Alloc и инициализации). Когда я вызываю removeObject на одном из SpriteEntities, что с ним происходит?

Я бы предположил, что сбор мусора получает их, но я хотел бы знать наверняка.

Благодаря

+0

Почему вы не испытываете это? Создайте NSMutableSet, добавьте три объекта SpriteEntity, сохраните один, а не другой, и сохраните его по умолчанию, а затем удалите их по одному, используя NSLog между ними. – hd1

+0

Итак, вы должны быть очень понятными здесь, если вы используете сбор мусора (GC), ручной подсчет ссылок (MRC) или автоматический подсчет ссылок (ARC). GC не использует удержание и отключение таким же образом. Механизм GC будет периодически запускаться (если не вызывается) для очистки вещей, и не обязательно в тех же циклах, что и подсчет ссылок и dealloc. – uchuugaka

ответ

3

Удаление объекта из коллекции капли его счетчик ссылок на единицу. Если никакая другая ссылка не указывает на объект, то ее счетчик ссылок достигает 0 и он освобождается.

+0

Он освобождается в конце текущего цикла. Его все еще можно использовать во время «текущего» цикла, но это не очень хорошая практика. –

+0

@PaulArdeleanu Правильно, но это деталь реализации. Всегда нужно думать о том, что члены коллекции доступны только до тех пор, пока они находятся в коллекции (или сохранены до их удаления). –

+0

Абсолютно правильно. Только хотел удостовериться, что он получил всю идею. –

0

Да, если класс CCSprite использует стандартные соглашения об именах, этот метод не увеличивает счетчик ссылок на объект, который он создает; поэтому единственным владельцем объекта является NSMutableSet. Как только объект был удален из этого набора, счетчик ссылок уменьшается на единицу, делая его равным нулю и, следовательно, ставит в очередь объект для освобождения.

Смежные вопросы