那么这个叫超级的呢?

时间:2010-06-11 12:48:36

标签: iphone core-data

来自the Core Data docs

  

继承如果您有两个子类   NSManagedObject所在的父级   class实现动态属性   和它的子类(。的孙子   NSManagedObject)覆盖方法   对于财产,那些覆盖   不能打电话给超级。

@interface Parent : NSManagedObject
@property(nonatomic, retain) NSString* parentString;
@end

@implementation Parent
@dynamic parentString;
@end

@interface Child : Parent
@end

@implementation Child
- (NSString *)parentString
{
    // this throws a "selector not found" exception
    return parentString.foo;
}
@end
非常,非常有趣,因为:我看到没人叫超级。或者是他们?等等... parentString.foo导致...崩溃???这是一个字符串。那个东西怎么能有.foo后缀呢?只是另一个文档错误?

1 个答案:

答案 0 :(得分:1)

我认为这个例子是乱码。

我很确定继承问题是由于@dynamic方法是由运行时创建的。编译器不会尝试为它们创建符号。如果没有实例化父类,我认为这些方法根本不存在。因此,子类实例实际上不可能有一个实时选择器/符号来调用。

这是自动运行时代码生成所必需的权衡。