objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?

objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?,第1张

概述当生成NSManagedObject子类时, xcode会创建两个额外的文件MyObject CoreDataProperties.h& MyObject CoreDataProperties.m使CoreData远离我们自己的代码. 这很不错,但我在WWDC剪辑中注意到他们的示例中没有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.即关于价值变化的内务管理.在这种情况下,有一个可以编辑的存根实现是很有用的.但对于标准行为,没有必要.

总结

以上是内存溢出为你收集整理的objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?全部内容,希望文章能够帮你解决objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存