Objective-C if([self isKindOfClass:...])静态方法

时间:2013-02-13 22:06:30

标签: objective-c categories static-methods

我寻求帮助,理解为什么代码行为如此奇怪。我有什么:BaseClass : NSManagedObjectChildClass : BaseClass

BaseClass有一个类别。 .H:

@interface BaseClass (Category)

+ (NSArray)method;

@end

的.m:

@implementation BaseClass (Category)

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

从项目的其他地方我打电话给*array = [ChildClass method];。在BaseClass(类别)实现控制台中读取self = (Class)ChildClass,但执行流仍会跳过if并由于某种原因直接转到return nil;,这超出了我的理解范围。有什么建议为什么会这样?所有答案都表示赞赏。感谢。

...因为我没有足够的重复点,所以我没有发布截图。希望我很清楚。

2 个答案:

答案 0 :(得分:4)

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

if (self==[ChildClass class]) {
    do stuff
    return resultArray;
}

答案 1 :(得分:1)

您可能最好在调用[[childOrBaseInstance class] method];的代码中执行+method

ChildClass会让自己的+method覆盖BaseClass的{​​{1}}。

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