2011-07-27 5 views
4

MyBaseClass라는 Objective-C 클래스와 MySubclassedClass라는 서브 클래스가 있다고 가정 해 보겠습니다.Objective-C : 서브 클래스의 호출 클래스 메소드

+ (UIColor *)backgroundColor; 
+ (UIImage *)backgroundImage; 

의 backgroundColor 방법은 backgroundImage를 호출

MyBaseClass

는 두 개의 클래스 메소드가 있습니다. 이 MyBaseClass에 국한 된 경우, 내 backgroundColor 방법은

+ (UIColor *)backgroundColor { 
    UIImage *img = [MyBaseClass backgroundImage]; 
    // irrelevant 
    return color; 
} 

과 같을 것이다 그러나 나는 MySubclassedClass에 MyBaseClass를 서브 할 수 있어야합니다. backgroundColor은 변경되지 않고 항상 부모의 backgroundImage 메소드를 호출합니다. 이 시나리오에서는 backgroundImage이 모든 하위 클래스에서 재정의됩니다. 1backgroundColor1는 인스턴스 메서드가 있었다면

, 단순히

UIImage *img = [[self class] backgroundImage]; 

을 사용하지만, 그것은 정적 메서드 때 내가 사용하는 수있는 '자기'는 없다.

Objective-C에서 어느 정도 떨어져 있습니까?

+2

그리고 왜 당신은 수업 방법에 자아가 없다고 생각합니까? – bealex

+2

"정적 메서드"라는 단어를 "클래스 메서드"로 바꿨습니다. Objective-C의 클래스 메소드는 C++에서'virtual'입니다.'static'이 아닙니다 ... 저는 C++에서이 용어를 선택하는 것이 불행하다고 생각합니다. – Yuji

답변

12

다른 클래스 메서드에서 클래스 메서드에 메시지를 보내면 self가 클래스입니다. 따라서 다음과 같은 작업을 수행 할 수 있습니다 당신은 클래스 (정적) 메소드의 내부 self을 사용할 수 있습니다

UIImage *img = [self backgroundImage]; 
+0

감사합니다. 수업에 언급 된 자기 자신을 깨닫지 못했습니다. – Neil

관련 문제