在可以通过不同的 init... 方法初始化的 Objective-C 类中,将所有初始化程序共用的初始化代码收集到一个从其他 init* 方法(有时也从从 Nib 唤醒)。
是否有关于如何命名该方法的约定?初始化器? 初始化公共? ...?
根据 Apple 的说法,初始化方法应始终以“init”一词开头,后跟描述参数的名称组件。如果一个类有多个初始值设定项,则应将这些方法链接在一起,以便只有其中一个方法完成所有工作,而其他方法应该简单地为缺少的参数提供默认值。
例如,Person 类可能具有以下 init... 方法:
- (id)init
{
return [self initWithFirstName:nil
lastName:nil];
}
- (id)initWithFirstName:(NSString *)firstName
lastName:(NSString *)lastName
{
return [self initWithFirstName:firstName
lastName:lastName
age:nil];
}
- (id)initWithFirstName:(NSString *)firstName
lastName:(NSString *)lastName
age:(NSNumber *)age
{
[super init];
self.firstName = firstName;
self.lastName = lastName;
self.age = age;
return self;
}
UPDATE
正如 @dreamlax 指出的,Apple 的文档建议(并且在使用 ARC 编译时,编译器需要)重新分配self
调用的返回值[super init]
.
该文档还建议检查nil
在执行任何进一步的初始化之前这是因为如果调用[super init]
回报nil
, self
在调用返回时已经被释放,因此不再有要初始化的实例。
苹果的文档还建议避免调用访问器方法init...
方法;相反,他们建议直接设置实例变量。所以initWithFirstName:lastName:age:
理想情况下,上面显示的方法应该以类似于以下示例的方式编写:
- (id)initWithFirstName:(NSString *)firstName
lastName:(NSString *)lastName
age:(NSNumber *)age
{
self = [super init];
if (self == nil) return nil;
_firstName = [firstName copy];
_self.lastName = [lastName copy];
_age = [age copy];
return self;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)