Соглашение об именах для инициализаторов Objective C? - PullRequest
2 голосов
/ 17 февраля 2011

Для предложений Objective C, таких как NSString с несколькими инициализаторами, соглашение, как представляется, предусматривает инициализатор по умолчанию init и затем несколько инициализаторов initWith...:

– init
– initWithBytes:length:encoding:
– initWithBytesNoCopy:length:encoding:freeWhenDone:
– initWithCharacters:length:
...

Однако предположим, что у меня есть класс Objective C, который имеет только один инициализатор, и этот инициализатор принимает несколько аргументов. Соглашение диктует, что я все еще называю это:

- initWithSomeStuff:thing1:thing2:thing3:

Или это можно просто назвать:

- init:thing1:thing2:thing3:

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Все объекты реагируют на метод init, даже если он не переопределен подклассом.Что касается вашего примера, я бы все же включил «с» для удобства чтения.Прочитайте вслух о том, что делает метод, и вы заметите, что «с» делает ваши действия более острыми.

3 голосов
/ 17 февраля 2011

Как писал Avizzv92, каждый подкласс NSObject имеет инициализатор -init, унаследованный от NSObject, поэтому технически ваш подкласс NSObject будет иметь два инициализатора.Обычная практика - иметь один обозначенный инициализатор, а другие инициализаторы вызывать его с аргументами по умолчанию.

Что касается вашей -init:thing1:thing2:thing3: идеи, это, безусловно, возможно.Однако рассмотрим следующее определение метода:

- (id)init:(id)param0 thing1:(id)param1 thing2:(id)param2 thing3:(id)param3 {
    // …
}

Легко понять, что param1 относится к thing1, param2 относится к thing2, а param3 относится к thing3,Но что такое param0?По этой причине инициализаторы с параметрами имеют имена, начинающиеся с initWithSomething: чтобы было понятно, что является первым параметром.

...