2009-05-16 3 views
1

Objective-C에서 첫 번째 하위 클래스를 시도하는 동안 해결할 수없는 다음 경고가 나타났습니다. decimalNumberWithMantissa를 호출하면 "Objective-C 유형에서 초기화"라는 경고가 표시됩니다.Object-C의 하위 클래스를 처리 할 때 클래스 메서드 처리

#import <Foundation/Foundation.h> 

@interface NSDecimalNumberSub : NSDecimalNumber { 
} 
@end 

@implementation NSDecimalNumberSub 
@end 

int main (int argc, char *argv[]) { 
    NSDecimalNumberSub *ten = [NSDecimalNumberSub 
      decimalNumberWithMantissa:10 
      exponent:0 
      isNegative:NO]; 
} 

하위 클래스로 클래스 메서드를 다르게 처리해야합니까? 나는 간단한 것을 놓치고 있습니까? 어떤 도움을 주시면 감사하겠습니다.

답변

3

NSDecimalNumber는 NSDecimalNumber를 반환하는 decimalNumberWithMantissa:... 메서드를 정의하므로 사용자 정의 하위 클래스가 아닌 기본 클래스의 인스턴스를 돌려 받게됩니다. 하위 클래스의 인스턴스를 반환하거나 또는 다른 방식으로 할당 및 초기화하는 편리한 메서드를 직접 만들어야합니다.

자신 만의 클래스를 작성하는 경우, id 유형을 리턴하는 편리한 메소드를 정의한 후 인스턴스를 작성할 때 [[self alloc] init]을 사용하여 클래스를 서브 클래 싱하기에 안전하게 만들 수 있습니다.

+0

편의 생성자는 일반적으로 동적 유형의 값 (유형 ID)을 반환합니다. NSDecimalNumber는 예외이며 오류가있는 것으로 간주합니다. 예를 들어 [NSArray array]는 id로, [NSMutableArray array]는 NSMutableArray의 인스턴스를 반환합니다. – jmah

관련 문제