Objective C初始值设定项的命名约定?

时间:2011-02-17 03:50:37

标签: objective-c naming-conventions

对于具有多个初始值设定项的NSString之类的Objective C条款,约定似乎是提供默认初始值设定项init,然后是多个initWith...初始值设定项:

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

但是,假设我有一个Objective C类,它只有一个初始值设定项,并且初始化程序需要多个参数。惯例是否规定我仍然称之为:

- initWithSomeStuff:thing1:thing2:thing3:

或者可以简单地称之为:

- init:thing1:thing2:thing3:

2 个答案:

答案 0 :(得分:4)

所有对象都响应init方法,即使它没有被子类覆盖。至于你的例子,为了便于阅读,我仍然会包含“with”。大声朗读这个方法正在做什么,你会注意到包含“with”会使你的行为变得更加明显。

答案 1 :(得分:3)

正如Avizzv92所写的那样,NSObject的每个子类都有-initNSObject继承的初始化者,因此从技术上讲,NSObject的子类将有两个初始化者。通常的做法是使用一个指定的初始化程序,并让其他初始化程序使用默认参数调用它。

至于你的-init:thing1:thing2:thing3:想法,肯定是可能的。但是,请考虑以下方法定义:

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

很容易理解param1引用thing1param2引用thing2param3引用thing3。但是什么是param0?这就是为什么带参数的初始化程序的名称以initWithSomething开头的原因:为了清楚说明第一个参数是什么。