Было бы правильно / правильно использовать только alloc без init? - PullRequest
6 голосов
/ 03 ноября 2010

Если мы не хотим реализовывать метод init в нашем классе, и учитывая, что init в NSObject возвращает только экземпляр объекта без инициализации, я не вижу смысла в вызове init, если мы уже получилиэкземпляр с помощью alloc.Я пытался, и это работает, но я не уверен, что это не вызовет проблем в будущем.

myClass *newObject = [myClass alloc];

вместо:

myClass *newObject = [[myClass alloc] init];

Большое спасибо.

Ответы [ 3 ]

16 голосов
/ 03 ноября 2010

Нет, просто позвонить alloc было бы неправильно. alloc обнуляет все переменные экземпляра объекта, init затем имеет возможность установить все или некоторые переменные экземпляра в их значения по умолчанию. Некоторые классы даже используют свои методы init для создания другого экземпляра и возврата его вместо того, который вы выделили.

Многие классы ожидают, что их методы init будут вызваны и, возможно, вызовут сбои, если вы не вызовете init. Если вы говорите о пользовательском классе, который наследуется непосредственно от NSObject и не требует инициализации переменных экземпляра, вы можете избежать использования [myClass alloc], но это определенно не хороший стиль программирования.

2 голосов
/ 03 ноября 2010

Я думаю, что это не очень хорошая идея.
Прочитайте Шаблон проектирования какао, особенно «Двухэтапное создание»

Вы также можете прочитать эту статью http://www.informit.com/articles/article.aspx?p=1398610

0 голосов
/ 03 ноября 2010

Я думаю, что это не будет иметь большого значения, если вы не реализуете "- (id) init", потому что если вы это сделали, вы бы вызвали метод init NSObject, который просто возвращает то же значение, которое вы отправили в метод.Хотя неплохо создать собственный метод init для установки переменной экземпляра.

...