Типичный init
метод в Objective C возвращает nil
, если инициализация не удается:Могу ли я использовать assert() для обнаружения сбоя [super init]?
- (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
предназначено для устранения ошибок, но в ситуациях, когда восстановление с ошибкой невозможно, разумно ли просто выкинуть утверждение?
Благодаря ...
Edit:
И не смотри также this question
Отсутствие исключения. Утверждения предназначены для утверждения логически невозможных/недостижимых путей во время отладки и, как таковые, они отключены в сборке релизов. Они никогда не предназначались для обработки ошибок, поэтому они не являются надежными для этой цели. –
Да, конечно. Я забыл, что утверждения часто отключены в сборках релизов. –