我可以使用assert()来捕获[super init]的失败吗?

时间:2015-06-05 12:35:56

标签: objective-c assert init super

如果初始化失败,Objective C中的典型init方法将返回nil

- (id) init {
  self = [super init];
  if (self) {
    // more initialisation
  }
  return self;
}

使用断言捕获应该的初始化是否有意义 永远成功?即:

- (id) init {
  self = [super init];
  assert(self);  // unrecoverable?

  // more initialisation
  array = [[NSArray alloc] init];
  assert(array); // unrecoverable?

  return self;
}

在这种情况下,[super init]的失败被定义(假设?)是一个不可恢复的错误,因此保证断言失败是合理的。

似乎返回nil的约定旨在用于允许错误恢复,但是在无法进行错误恢复的情况下,抛出一个断言是否合理?

...谢谢

编辑:

另见this question

1 个答案:

答案 0 :(得分:1)

按照正常模式,没有返回nil就足够了。由调用者决定如何处理它:

id obj = [[SomeObject alloc] init];
if (!obj)
    [NSException raise:@"Oops"];