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