到目前为止,我已经看到过三种方式:
1:
- (instancetype)init
{
self = [super init];
if (self) {
// ...
}
return self;
}
2:
- (instancetype)init
{
if (self = [super init]) {
// ...
}
return self;
}
3:
- (instancetype)init
{
if ((self = [super init]) == nil)
return nil;
// ...
return self;
}
哪种形式更具惯用性Objective-C?
答案 0 :(得分:5)
大多数“现代”方法(默认情况下在Xcode 4中使用)。
- (instancetype)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
旧版Xcode的默认设置。
- (instancetype)init
{
if (self = [super init])
{
// Initialization code here.
}
return self;
}
虽然“合法”但很难看到,我不推荐它。
传统上,在Objective-C 1.0中,init方法返回id
,从最近的Objective-C 2.0迭代开始,建议返回instancetype
。
答案 1 :(得分:2)
一切都是一样的,没关系。我建议使用前两个中的一个。最后一个很少完成。
您可能在Apple上找不到这个级别的任何推荐。他们声明,你应该将super的init的返回值设置为self。你是怎么做到的,取决于你。
答案 2 :(得分:-1)
我们通常都喜欢这三种方法都是正确的。
- (id) init
{
self = [super init];
if (self != nil)
{
// your code here
}
return self;
}
答案 3 :(得分:-1)
第一或第二是优选的。无需检查它是否为零,因为“if”条件会自动检查。以下是使用init的标准方法。
- (id)init
{
self = [super init];
if (self) {
<#initializations#>
}
return self;
}