- 1
- 2
- 3
- 4
- 5
- 6
- 7
- (id)init
{
if (nil != (self=[super init]))
{
}
return self;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−79
- (id)init
{
if (nil != (self=[super init]))
{
}
return self;
}
Мастер Йода
В чём соль, обжективщики?
Стандартный вариант:
P.S. А у ОПа судя по комменту "Магистр Йода" вообще были претензии только к йодовскому условию, где первой идёт константа nil?
Причем ладно был бы он класс-методом с плюсиком, тогда было бы все очевидно - обычная фабрика. Но тут же его помечают как инстанс метод...
То есть можно писать
Единственное, я не уверен в приоритете операций в данной записи.
Соответственно результат присваивания можно использовать в любой операции. Конкретно в init'е проверяется не вернул ли [super init] значение nil.
Сам init - самый обычный рядовой метод, с точки зрения синтаксиса, просто по соглашениям его (или вариации - initWithFrame, initWithDecoder) принято использовать в качестве инициализирующей функции.
Да это то все понятно. Меня смущало именно присваивание self.
Как я уже писал, Obj-C выглядит так, как будто он реализован поверх C дефайнами.
Про инстанс метод - зато в Obj-C аллокатор является класс-методом (правда, он только память выделяет и возвращает id, так что фабрикой назвать его нельзя никак).
Ну и да, многие девелоперы (и я, да) для своих классов пишут статические фабрики.
Правда меня все равно пугает self = xxx. Ну как-то это неестественно.
Про синглтон идеи не понял.
Обычно он делается по-старинке - статик инстанс.
Для удовлетворения извращенных фантазий :) Например в зависимости от параметров вернуть другой объект, являющийся потомком текущего.
> Про синглтон идеи не понял.
Ну вот тот самый статик инстанс возвращать из init'а. Чтобы внешний код не знал, что это синглтон.
P.S. Не обращайте внимания на мои странные мысли и идеи, это на меня годы работы с крестами так влияют ;)
Тащемта так правоставные синглтоны в Obj C и пишутся. По идее надо перекрывать все методы, через которые можно получить второй инстанс или поменять retain count самого синглтона, это init, autorelease, retain, release, и даже сам alloc.
Редко кто так заморачивается, пишут просто фабрику sharedInstance и все.
Заработался.
В стандартной библиотеке так и запилено, конструкторы многих классов возвращают приватных наследников.
> Ну вот тот самый статик инстанс возвращать из init'а. Чтобы внешний код не знал, что это синглтон.
Можно запилить статический конструктор с приватным init-ом, а в стандартном init-е бросать исключение.