2011-07-18 28 views
10

可能重复:
In Objective-C why should I check if self = [super init] is not nil?[super init]为什么会返回零,当“超级”是NSObject?

在Objective-C的书我读,它是说,当[init]消息发送到NSObject,有时它可能会返回nil,我们应该检查返回值,然后再发送更多消息给最终可能是nil的消息。

self = [super init]; 

if (self) { 
do stuff 
} 

我问你,虽然,需要采取什么措施为NSObject不能够init本身?

编辑:问题具体处理YourClass:NSObject的实例。

+0

我的问题是特定于您的类的超类是NSObject本身的情况。 – JAM

+0

另一个问题涵盖了这种情况,并且有很多非常好的答案。 –

回答

8

NSObject本身不会在init上返回零,但是从它继承的其他类可能会这样,所以总是检查返回值init是一种很好的做法。例如,这将返回零:

[[NSData alloc] initWithContentsOfFile:@"path/to/a/file/that/does/not/exist"]; 
+0

谢谢!我想对于那些'[super init]'永远不是'nil'的类,没有必要进行检查。这样你可以,例如:'return [super initWithFoo:X baz:Y];' –

相关问题