【问题标题】:Why would [super init] ever return nil, when "super" is NSObject? [duplicate]当“super”是 NSObject 时,为什么 [super init] 会返回 nil? [复制]
【发布时间】:2011-10-07 08:34:08
【问题描述】:

可能重复:
In Objective-C why should I check if self = [super init] is not nil?

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

self = [super init];

if (self) {
 do stuff
}

不过我问你,NSObject 自己不能init 需要发生什么?

编辑:问题专门处理 YourClass:NSObject 的实例。

【问题讨论】:

  • 我的问题是针对你的类的超类是 NSObject 本身的情况。
  • 另一个问题涵盖了这种情况,并且有许多非常好的答案。

标签: objective-c init super


【解决方案1】:

NSObject 本身永远不会在 init 上返回 nil,但是从它继承的其他类可能会,因此始终检查 init 的返回值被认为是一种好习惯。例如,这将返回 nil:

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

【讨论】:

  • 谢谢!我想对于[super init] 永远不是nil 的课程,没有必要进行检查。这样你就可以,例如:return [super initWithFoo:X baz:Y];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多