相关疑难解决方法(0)

在Objective-C中,我为什么要检查self = [super init]是不是nil?

我有一个关于在Objective-C中编写init方法的一般问题.

我看到它到处都是(Apple的代码,书籍,开源代码等)init方法应该在继续初始化之前检查self = [super init]是否为nil.

init方法的默认Apple模板是:

- (id) init
{
    self = [super init];

    if (self != nil)
    {
        // your code here
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

为什么?

我的意思是什么时候初始会返回零?如果我在NSObject上调用init并且没有回来,那么一定要搞砸了,对吗?在那种情况下,你甚至可以不写一个程序......

类'init方法可能返回nil真的很常见吗?如果是这样,在什么情况下,为什么?

null objective-c init

163
推荐指数
5
解决办法
4万
查看次数

self = [super init]重访

我偶然发现这篇文章在Objective-C中我为什么要检查self = [super init]是不是nil?

我能理解这种语法:

- (id)initWithString:(NSString *)aString
{
    self = [super init];
    if (self)
    {
        instanceString = [aString retain];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

或者这个语法:

- (id)init;
{
 if (!(self = [super init]))
   return nil;

 // other stuff
 return self;
}
Run Code Online (Sandbox Code Playgroud)

但我仍然不理解"标准"模板语法

- init {
    if((self = [super init])) {
        // set up instance variables and whatever else here
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

有人可以尽可能清楚地告诉(3)与(1)或(2)相比更多或更少吗?我读到的都是如此令人困惑(为什么人们不能同意纯粹技术性的东西似乎是政治:))

然而,当我读到作者的文章时,我可以模糊地理解它远不仅仅是语法糖辩论或品味问题.例如,据说:

奇怪的是,虽然案例3非常普遍,但支持1,2和4但与案例3不兼容的初始化程序已经成为标准.然而,案例3绝大多数情况下,初始化程序支持1,2和4但是与案例3不相容已成为标准.

所以,如果可能的话,我想从Objective C Gurus那里得到一个深刻的哲学答案.

initialization objective-c nsobject ios

3
推荐指数
2
解决办法
822
查看次数

标签 统计

objective-c ×2

init ×1

initialization ×1

ios ×1

nsobject ×1

null ×1