如果初始化失败,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
的约定旨在用于允许错误恢复,但是在无法进行错误恢复的情况下,抛出一个断言是否合理?
...谢谢
编辑:
答案 0 :(得分:1)
按照正常模式,没有返回nil
就足够了。由调用者决定如何处理它:
id obj = [[SomeObject alloc] init];
if (!obj)
[NSException raise:@"Oops"];