Если вы используете ARC, между ними нет особой разницы.Если вы не используете ARC, разница чрезвычайно важна.
Комбинация alloc/init
дает вам ссылку на владельца.Это означает, что вы должны release
это позже.Вариант classnameWithFoo
возвращает не владеющую ссылку.Вы не можете release
it.
Это соответствует обычным соглашениям о присвоении имен Какао.Все методы возвращают не владеющие (автоматически выпускаемые) экземпляры, кроме методов, которые начинаются с alloc
, copy
, mutableCopy
и new
.Они возвращают владельцы ссылок, которые вы должны release
.
Какой из них использовать, в основном, дело вкуса.Однако если вам нужны временные объекты, которые вы можете быстро утилизировать, вариант alloc
приводит к несколько меньшему количеству вызовов методов (autorelease
) и в цикле, это также уменьшает максимальный объем памяти.Однако в большинстве случаев эта сниженная стоимость пренебрежимо мала.