我已经阅读了Marcus S. Zarra的Core Data: Data Storage and Management for iOS, OS X, and iCloud(第二版)中与iOS相关的章节,这对我很有帮助。不过,我想知道一个方面,该书提出的风格与我自己的风格不同。
本书的示例通过利用KVC(例如NSManagedObject
)访问[recipe valueForKey: @"name"]
的属性和关系。 (仅有)关于如何定义属性访问器的两个简短解释(例如,在recipe.name
中使用)。这似乎暗示着KVC明确推荐使用 property 访问者。
我通常喜欢属性访问器,例如因为它们可以防止输入错误引起的错误(例如[recipe valueForKey: @"nam"]
),并且Xcode可以为我生成其源代码(Editor
| Create NSManagedObject Subclass
)。
我的问题是:为什么有一些技术原因为什么应该一般使用KVC而不是属性访问器样式?
最佳答案
KVC非常有用,并且本书强调了KVC的使用,因为坦率地说,iOS开发并没有将强调为。了解KVC是iOS开发人员工具包中非常有用的工具,不幸的是,关于KVC的教义被遗忘了。
话虽如此,出于您陈述的原因,您应该使用属性访问器。它们确实在编译时而不是运行时捕获错误,并且速度要快得多。
当您对集合进行操作时,KVC非常有用,在动态情况下或您不一定知道要针对哪个对象的情况下,KVC非常有用。这些是点语法失败的地方。我认为,点语法不能与id
一起使用,它是Objective-C开发的基石。
无论如何,没有理由不使用属性访问器,我通常在生产代码中使用它们。
最后一点:我不使用Xcode的代码生成。它有足够的缺陷,我建议人们使用发电机代替。您将获得更好的结果和更可维护的代码库。