2012-03-24 5 views
7

상당히 간단한 질문 :의 Obj-C : NSError initialiser에서

내가 잘못 될 수있는 잠재력을 가지고 내 클래스의 init 메소드가 있습니다. 그럴 경우, "nil"을 반환 할 계획이지만 오류를 반환하고 싶습니다. init 메소드에 NSError ** 매개 변수를 사용하는 것은 나쁜 습관입니까? 내 메소드 선언은 다음과 같이 보일 것이다 :

- (id) initWithArgs:(NSString*) args andError:(NSError**)error; 

많은 감사를 닉

답변

7

그것은 이상한,하지만 그것이 반드시 나쁜 관행 생각하지 않습니다. 나는 방법의 두 번째 부분을 "andError :"대신에 "error"라고 명명했습니다. 메서드 이름 부분을 'and'로 연결할 필요가 없으며,이 경우 오류가 개체 초기화에 사용되었다는 인상을줍니다. 그냥합니다 또한

- (id) initWithArgs:(NSString*) args error:(NSError**)error; 

를, 할당 된 객체를 해제하는 것을 잊지 마세요 당신이 (전무 같은) 뭔가 다른 반환하려는 경우 : 내가 추천 할 것입니다

- (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; 
} 
+1

한 가지는 항상에 오류가 설정됩니다 메서드의 시작 부분에 nil. 호출자가 그것을 0으로 설정한다는 보장은 없습니다. – EricS

+4

@EricS 오류가없는 한'error'를'nil'으로 설정할 이유가 없습니다. 메소드가'nil'을 반환하지 않는 한 호출자는 절대로'@ error' 값을 보지 않아야합니다. 그렇지 않으면 버그가 있습니다. @Caleb는'error'에 할당하기 전에'error'가 NULL이 아닌지 검사해야합니다. – bbum

+0

@bbum 감사합니다. – Caleb