3

我寻求帮助以了解为什么代码表现得如此奇怪。我有什么:BaseClass : NSManagedObjectChildClass : BaseClass

BaseClass 有一个类别。。H:

@interface BaseClass (Category)

+ (NSArray)method;

@end

米:

@implementation BaseClass (Category)

+ (NSArray *)method
{
    if ([self isKindOfClass:[ChildClass class]) {
        do stuff
        return resultArray;
    }
    return nil;
}

从项目的另一个地方我打电话给*array = [ChildClass method];. 在 BaseClass (Category) 实现控制台中读取,但由于某种原因,self = (Class)ChildClass执行流程仍然跳过if并直接传递到,这超出了我的理解。return nil;任何建议为什么会这样?感谢所有答案。谢谢。

...因为我没有足够的代表点,所以我没有发布屏幕截图。希望我很清楚。

4

2 回答 2

4

你在一个静态方法中,所以 self 代表类本身。足以做到这一点:

if (self==[ChildClass class]) {
    do stuff
    return resultArray;
}
于 2013-02-13T22:24:03.987 回答
1

你最好[[childOrBaseInstance class] method];在你的代码中调用+method.

ChildClass将拥有它自己+method的 override BaseClass's +method

每当你检查你的类并做一些不同的事情时,问问自己你是否只是手动重新创建多态性。

于 2013-02-13T23:28:07.433 回答