Это необычно, но я не думаю, что это обязательно плохая практика. Я бы назвал вторую часть метода просто «error» вместо «andError:». Вам не нужно связывать части имени метода с 'и', и в этом случае также создается впечатление, что ошибка используется для инициализации объекта. Просто сделайте это:
- (id) initWithArgs:(NSString*) args error:(NSError**)error;
Кроме того, не забудьте освободить выделенный объект, если вы планируете вернуть что-то еще (например, nil):
- (id) initWithArgs:(NSString*) args error:(NSError**)error
{
if ((self = [super init])) {
if (canInitThisObject) {
// init this object
}
else {
[self release];
self = nil;
if (error != nil) {
*error = [NSError errorWithDomain:someDomain code:someCode: userInfo:nil];
}
}
}
return self;
}