В чем разница между [[alloc] init] и [[thing] retain]? - PullRequest
1 голос
/ 27 августа 2010

Мне было интересно, в чем (если есть) разница между созданием объектов с использованием:

NSThing *thing = [[NSThing alloc] initWithObject:object];

против

NSThing *thing = [[NSThing thingWithObject:object] retain];

Есть ли разница в том, как работает управление памятью?Кроме того, когда принято использовать одно против другого?

1 Ответ

8 голосов
/ 27 августа 2010

Выделение и инициализация объекта немного более эффективны, потому что thingWithObject: будет делать alloc, затем init, затем autorelease, которые вы встречаете с retain, так что вы добавьте что-нибудь в пул авто-релизов. Первый вариант включает только alloc и init.

Лично я использую явное alloc, когда хочу прояснить, что время жизни объекта будет обработано мной, и я использую вспомогательные методы (thingWithThing:) для любого объекта, который мне не понадобится за пределами область, в которой он создан.

Например, явное выделение и инициализация внутри цикла, как правило, предпочтительнее, так что вы не заполняете пул авто-выпуска. Я также использую явный alloc + init вместо thingWithThing: + retain для объектов, которые должны пережить итерацию цикла выполнения.

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