2012-10-07 4 views
4

예를 들어 myTextView라는 UITextView의 하위 클래스를 만들고 있다고 가정합니다. 나는 그 클래스를 자신의 대표자로 만들 것이다. 그래서 대리자 메서드를 구현해야합니다.iOS - 클래스 내부의이 선언이 맞습니까?

- (void)textViewDidBeginEditing:(UITextView *)textView { 

이 방법을 이와 같이 선언해야합니까?

- (void)textViewDidBeginEditing:(myTextView *)textView { 

내가 자신을 참조하는 대리자를 정의 myTextView 클래스 내부이기 때문에 그것은, 재귀처럼 나에게 나타납니다 ...

올바른 방법은 무엇인가

? 감사.

- (void)textViewDidBeginEditing:(UITextView *)textView 

당신이 어떤 클래스 유형의 사용자 정의 클래스 형식이나와 프로토콜 방법을 구현하는 경우, 메소드가 여전히 있기 때문에 전화를받을 것이다 : 프로토콜에 정의 된 같은 단지 설명을위한

+2

중 하나가 ('myTextView'는 파생 클래스 이름이 가정) 작동합니다. 그러나 첫 번째 방법은 관행입니다. (BTW, 관습에 따라 Objective-C의 클래스 이름은 대문자로 시작해야합니다.) –

답변

4

는 메소드를 구현하는 것이 좋습니다 수행 된 유형 점검이 없습니다. 매개 변수는 실제로 사용자 정의 하위 클래스입니다. 어쨌든, 다시 설명을 위해, 나는 당신이 사용자 정의 서브 클래스의 인스턴스 변수를 처리하려면 내부 캐스트를하는 것이 좋습니다 :

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    MyTextView * myTextView = (MyTextView *)textView; 
    ... 
} 
+1

"다른 경우에는 클래스가 프로토콜을 준수하지 않기 때문에 호출되지 않습니다." 'respondsToSelector :'가 그 체크에 사용되기 때문에 사실이 아니며, 타입에 대해서는 신경 쓰지 않고 메소드 이름에 대해서만 신경을 쓴다. –

+0

대단히 감사합니다 !!!! – SpaceDog

+0

H2CO3, 네가 맞다. 어떤 유형 검사도 수행하지 않고있다. 어쨌든 혼란을 야기하지 않기 위해 프로토콜 선언을 사용하는 것이 가치가 있습니다. (적어도 기본적으로 경고없이 오류가 발생하기 쉽습니다) UITextView를 선언 된 하위 클래스가 아니라 매개 변수로 가져 오기 때문에 이바라스. – atxe

관련 문제