2011-02-17 3 views
2

여러 초기화 프로그램이있는 NSString와 같은 Objective C 클러스터의 경우 기본 이니셜 라이저 init과 여러 initWith... 이니셜 라이저를 제공하는 것으로 보입니다.Objective C 이니셜 라이저의 명명 규칙?

– init 
– initWithBytes:length:encoding: 
– initWithBytesNoCopy:length:encoding:freeWhenDone: 
– initWithCharacters:length: 
... 

그러나 Objectzive C 클래스에 이니셜 라이저가 하나만 있다고 가정합니다 그 이니셜 라이저는 여러 인수를 취합니다. 컨벤션은 내가 여전히 그것을 부르는 것을 지시합니까?

- initWithSomeStuff:thing1:thing2:thing3: 

또는 단순히 호출 할 수 있습니다 :

- init:thing1:thing2:thing3: 

답변

3

NSObject의 모든 서브 클래스는 NSObject에서 상속 -init initialiser이 있으므로 기술적으로 NSObject의 하위 클래스는 두 개의 initialisers있을 것입니다. 일반적인 방법은 이니셜 라이저로 지정하고 다른 초기화 프로그램이 기본 인수로 호출하도록하는 것입니다.

귀하의 -init:thing1:thing2:thing3: 아이디어는 확실히 가능합니다. 그러나, 다음과 같은 방법 정의를 고려해

- (id)init:(id)param0 thing1:(id)param1 thing2:(id)param2 thing3:(id)param3 { 
    // … 
} 

param2thing2을 의미 param1thing1을 의미 이해하기 쉽고, param3thing3을 의미합니다. 그러나 param0은 무엇입니까? 첫 번째 매개 변수가 무엇인지 명확하게하기 위해 매개 변수가있는 초기화 프로그램이 initWithSomething으로 시작하는 이름을 갖는 이유는 그 때문입니다.

4

모든 개체는 하위 클래스에 의해 오버 쟁이가 아닌 경우에도, init 메소드에 응답합니다. 당신의 예제에서 나는 가독성을 위해 여전히 "with"를 포함 할 것이다. 큰 소리로 그 방법이 무엇을하는지 읽고 "with"를 포함하여 알아 차리자. Avizzv92 쓴 것처럼

+0

사랑하는 신랄한 방법 이름의 개념 –