- 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;
}
Мастер Йода
vistefan 19.08.2013 20:24 # +2
В чём соль, обжективщики?
vse_govno 19.08.2013 23:18 # 0
Стандартный вариант:
guest 20.08.2013 08:33 # 0
kegdan 20.08.2013 09:40 # +2
bormand 20.08.2013 10:16 # +1
vistefan 20.08.2013 11:15 # 0
P.S. А у ОПа судя по комменту "Магистр Йода" вообще были претензии только к йодовскому условию, где первой идёт константа nil?
bormand 20.08.2013 11:40 # 0
krypt 20.08.2013 14:42 # +1
bormand 20.08.2013 14:45 # 0
Причем ладно был бы он класс-методом с плюсиком, тогда было бы все очевидно - обычная фабрика. Но тут же его помечают как инстанс метод...
krypt 20.08.2013 14:52 # 0
То есть можно писать
Единственное, я не уверен в приоритете операций в данной записи.
Соответственно результат присваивания можно использовать в любой операции. Конкретно в init'е проверяется не вернул ли [super init] значение nil.
Сам init - самый обычный рядовой метод, с точки зрения синтаксиса, просто по соглашениям его (или вариации - initWithFrame, initWithDecoder) принято использовать в качестве инициализирующей функции.
bormand 20.08.2013 15:40 # 0
Да это то все понятно. Меня смущало именно присваивание self.
krypt 20.08.2013 14:59 # 0
Как я уже писал, Obj-C выглядит так, как будто он реализован поверх C дефайнами.
Xtasy 20.08.2013 15:00 # 0
Про инстанс метод - зато в Obj-C аллокатор является класс-методом (правда, он только память выделяет и возвращает id, так что фабрикой назвать его нельзя никак).
Ну и да, многие девелоперы (и я, да) для своих классов пишут статические фабрики.
bormand 20.08.2013 15:41 # +1
Правда меня все равно пугает self = xxx. Ну как-то это неестественно.
Xtasy 20.08.2013 15:53 # 0
bormand 20.08.2013 16:21 # +1
Xtasy 20.08.2013 16:31 # 0
Про синглтон идеи не понял.
Обычно он делается по-старинке - статик инстанс.
kegdan 20.08.2013 16:40 # 0
bormand 20.08.2013 16:47 # +1
Для удовлетворения извращенных фантазий :) Например в зависимости от параметров вернуть другой объект, являющийся потомком текущего.
> Про синглтон идеи не понял.
Ну вот тот самый статик инстанс возвращать из init'а. Чтобы внешний код не знал, что это синглтон.
P.S. Не обращайте внимания на мои странные мысли и идеи, это на меня годы работы с крестами так влияют ;)
NAlexN 20.08.2013 19:33 # 0
Тащемта так правоставные синглтоны в Obj C и пишутся. По идее надо перекрывать все методы, через которые можно получить второй инстанс или поменять retain count самого синглтона, это init, autorelease, retain, release, и даже сам alloc.
Редко кто так заморачивается, пишут просто фабрику sharedInstance и все.
Xtasy 20.08.2013 20:01 # 0
NAlexN 21.08.2013 08:37 # 0
Xtasy 21.08.2013 10:53 # 0
Заработался.
UncleAli 21.08.2013 22:36 # 0
В стандартной библиотеке так и запилено, конструкторы многих классов возвращают приватных наследников.
> Ну вот тот самый статик инстанс возвращать из init'а. Чтобы внешний код не знал, что это синглтон.
Можно запилить статический конструктор с приватным init-ом, а в стандартном init-е бросать исключение.
blackhearted 20.08.2013 10:32 # +3