objective-c – NSManagedObject子类生成的CoreDataProperties.m
当生成NSManagedObject子类时,xcode会创建两个额外的文件MyObject CoreDataProperties.h& MyObject CoreDataProperties.m使CoreData远离我们自己的代码.
这很不错,但我在WWDC剪辑中注意到他们的示例中没有CoreDataProperties.m文件.所以我尝试在我的代码中删除这些,并且所有内容都编译并在没有它们的情况下正常运行,它们似乎根本不需要. 它们是否以某种方式被我忽略了,或者如果没有,那么为什么xcode会产生它们呢? 解决方法
简短的回答:
不,没有必要. 答案很长: Objective-C是一种动态类型,后期绑定编程语言.在一个简短的形式中,这意味着每个类型的决策都可以在运行时而不是编译时进行,您可以访问一个属性并将消息发送到对象而无需知道其类型(类). 但是,对于Core Data框架而言,您并不需要作为Core Data的用户和您的模型来了解实体类型的托管对象的类型.甚至没有必要为实体类型设置特定类型. (我不经常生成类,如果我这样做,我会手动生成.)因此,与其他编程语言相比,这些生成的类不必为编译器提供类型. 但是,编译器希望至少看到每个方法至少有一次获得签名(参数类型).否则会发出警告.即使有可能像这样的工作代码…… NSManagedObject *person = … NSString *firstName = [person firstName]; …对于具有属性firstName的实体类型Person,编译器将警告您,他对方法-firstName一无所知. 相反,你可以键入这样的东西: NSManagedObject *person = … NSString *firstName = [person valueForKey:@"firstName"]; (编译器知道-valueForKey :,因为这是在NSObject中声明的方法.) 除此之外,您还可以获得诸如代码完成,检查输入错误等优点.但是您不需要使用Xcode的代码生成工具.只需声明这样的类和界面上的属性.可以使用@dynamic动态生成访问器. (我个人几乎从不使用静态代码生成.) 编辑:在评论中添加了讨论结果. 因此,拥有该类别的接口(“.h-file”),编译器知道足够编译整个代码而没有警告.这将在运行时工作,如果有保证 – 或在运行时检查 – 可以分派相应的消息.从Objective-C的最开始,这在许多情况下都是有意义的.即用于转发和非正式协议.在Core Data的上下文中,它用于动态生成标准访问器方法.没有任何实现,一切正常. 但是,出于某些原因,我想要实现,i.即关于价值变化的内务管理.在这种情况下,有一个可以编辑的存根实现是很有用的.但对于标准行为,没有必要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |