我寻求帮助,理解为什么代码行为如此奇怪。我有什么:BaseClass : NSManagedObject
和ChildClass : 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;
,这超出了我的理解范围。有什么建议为什么会这样?所有答案都表示赞赏。感谢。
...因为我没有足够的重复点,所以我没有发布截图。希望我很清楚。
答案 0 :(得分:4)
你是一个静态方法,所以self代表了类本身。足以做到这一点:
if (self==[ChildClass class]) {
do stuff
return resultArray;
}
答案 1 :(得分:1)
您可能最好在调用[[childOrBaseInstance class] method];
的代码中执行+method
。
ChildClass
会让自己的+method
覆盖BaseClass
的{{1}}。
每当你检查你的课程并做一些不同的事情时,问问自己是否只是手动重新创建多态性。