对于具有多个初始化程序的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指的是thing1param2指的是thing2,而param3指的是thing3。但是什么是param0?这就是带有参数的初始化程序的名称以initWithSomething开头的原因,以使第一个参数清晰可见。

08-18 00:48