2012-04-29 3 views
14

Calculator이라는 클래스가 있다고 가정합니다. 거기에 runProgram라는 클래스 메서드가 있습니다. 내가 클래스의 구현 내부의이 클래스의 메소드를 호출하고 싶다면 ,이 둘 사이의 차이는 무엇 일 것입니다 :클래스 이름을 통해 클래스 메서드를 호출하는 경우

[Calculator runProgram] 

또는

[self runProgram] 

이 모두 동일한 있습니까?

답변

31

는 인스턴스 메소드 내부 경우에이

[self runProgram] 

, self 오브젝트 인스턴스 자체를 의미하고, 따라서 런타임 에러를 생성한다. 대신

[[self class] runProgram] 

을 사용하고 싶습니다. 당신이 다음 다른 클래스 메소드에서이 메소드를 호출하면 지금 self는 클래스 자체를 의미하기 때문에

그러나

[self runProgram] 

은 올바른 것입니다. 나는 그 클래스의 서브 클래스가 잘못 슈퍼 클래스 '(Calculator 년대) 대신 가능성이 재정의 된 메서드의 메소드를 호출하기 때문

[Calculator runProgram] 

을 사용 억제 것입니다.

+1

Calculator와는 아무런 관련이없는 클래스에 대해 [Calculator runProgram]'이 올바른지주의하면서 다양한 팩토리 메소드를 사용하고 있습니까? – Tommy

+0

+1 : 물론 다른 방법이 없기 때문에! 그러나 OP는 implementor 클래스 자체에서 메소드를 호출하는 것에 대해 질문했습니다. –