对于具有多个初始值设定项的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:
答案 0 :(得分:4)
所有对象都响应init方法,即使它没有被子类覆盖。至于你的例子,为了便于阅读,我仍然会包含“with”。大声朗读这个方法正在做什么,你会注意到包含“with”会使你的行为变得更加明显。
答案 1 :(得分:3)
正如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
开头的原因:为了清楚说明第一个参数是什么。