在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];
}
对于子类,是否必须对类方法进行不同的处理?我错过了一些简单的事吗?任何帮助将不胜感激。
答案 0 :(得分:3)
NSDecimalNumber定义了返回NSDecimalNumber的decimalNumberWithMantissa:...
方法,因此您将返回基类的实例,而不是自定义子类。您必须创建自己的便捷方法来返回子类的实例,或者只是以另一种方式分配和初始化它。
如果您正在编写自己的类,则可以定义类似的方便方法以返回类型id
,然后在创建实例时使用[[self alloc] init]
以使您的类对子类安全。