NSManagedObject初始化最正确的方式

问题描述 投票:0回答:1

我总是用这个来创建我的管理对象

convenience init(context moc: NSManagedObjectContext)

但是我遇到了这个话题https://forums.developer.apple.com/forums/thread/74186

所以,现在我想知道哪种方法是最正确的。我现在看到至少有 4 种 NSManagedObject 初始化方式(不包括简单的

init()
)。 也许其中一些有性能优势或者其他什么?有人可以一劳永逸地澄清一下吗?

    // 1
    let managedObject = MyManagedObject(context: context)
    
    // 2
    let managedObject = NSManagedObject(
        entity: MyManagedObject.entity(),
        insertInto: context
    ) as? MyManagedObject
    
    // 3
    let entity = NSEntityDescription.entity(
        forEntityName: "MyManagedObject",
        in: context
    )
    let managedObject = NSManagedObject(
        entity: entity!,
        insertInto: context
    ) as? MyManagedObject
    
    // 4
    let managedObject = NSEntityDescription.insertNewObject(
        forEntityName: "MyManagedObject",
        into: context
    ) as? MyManagedObject
swift core-data
1个回答
0
投票

首先,链接帖子已有 7 年历史了。 Swift 语言发展得相当快。

第二个接受的答案是错误的。您提到的所有初始化方法基本上都是相同的,它们创建一个实例并将其插入到上下文中。

但是也有差异。唯一的方法 #1 返回实际

NSManagedObject
子类
MyManagedObject
.

的非可选实例

方式 #2–#4 返回一个可选的

NSManagedObject
实例 – 基类 – 必须将其转换为所需的类型。

据我所知,#1 的语法是在发布该主题时刚刚引入的。如今

init(context:)
是强烈推荐的 API,因为它是最安全的 API(不涉及文字字符串,也不涉及类型转换)并且它返回正确的类型,感谢您使许多核心数据类型变得通用。

就性能而言,两者之间没有任何优势。

© www.soinside.com 2019 - 2024. All rights reserved.