对于具有多个初始化程序的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:
最佳答案
正如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
开头的原因,以使第一个参数清晰可见。