在objective-c中进行子类化时处理类方法

时间:2009-05-16 23:32:38

标签: objective-c

在Objective-C中尝试我的第一个子类时,我遇到了以下警告,我似乎无法解决。对decimalNumberWithMantissa的调用给出了“从不同的Objective-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];
}

对于子类,是否必须对类方法进行不同的处理?我错过了一些简单的事吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

NSDecimalNumber定义了返回NSDecimalNumber的decimalNumberWithMantissa:...方法,因此您将返回基类的实例,而不是自定义子类。您必须创建自己的便捷方法来返回子类的实例,或者只是以另一种方式分配和初始化它。

如果您正在编写自己的类,则可以定义类似的方便方法以返回类型id,然后在创建实例时使用[[self alloc] init]以使您的类对子类安全。