This is considered typical
- (id)init { self = [super init]; if (self) { // <#initializations#> } return self; }
No, exceptions in Objective-C are meant for states which you can't really recover from, not just something to show that an operation failed. If you initializer fails, simply return nil to show it.