【问题标题】:Instantiating Custom Object with Core Data使用核心数据实例化自定义对象
【发布时间】:2013-07-23 04:13:38
【问题描述】:

目前,每当我想保存一个名为 List 的自定义对象时,我都会使用

(核心日期 + Magical Record

List *list = [List MR_createInContext:_managedObjectContext];

现在我想知道我是否可以像这样实例化一个列表项

List *localList = [[List alloc] init];
// set some properties
localList.name = @"foobar";

List *newList = [List MR_createInContext:_managedObjectContext];
newList = locaList

这会导致核心数据/内存问题吗?

【问题讨论】:

    标签: iphone ios objective-c core-data magicalrecord


    【解决方案1】:

    不,有几个原因:

    1. 您不能将init 与托管对象一起使用。指定的初始化程序是initWithEntity:insertIntoManagedObjectContext:NSEntityDescription 上还有一个便利构造函数,名为 insertNewObjectForEntityForName:inManagedObjectContext:。如果您不使用其中之一,就会遇到问题。

    2. 当您分配newList = localList 时,您会丢弃localList 中的前一个对象及其所有数据。在此之后剩下的就是您最初分配给newList 的那个。例如,您对localList.name 的分配与localList 对象一起消失。

    【讨论】:

    • List 是 OP 的类——我们不知道 init 方法可能会做什么。
    【解决方案2】:

    由于您已经定义了List,很难说您是否在这两种情况下都正确地创建了List 实例。至少您的代码会泄漏您创建的第二个List,而且该代码似乎不太可能按照您的想法行事。

    您的代码相当于:

    List *localList = [[List alloc] init];
    // set some properties
    localList.name = @"foobar";
    
    List *newList = localList;
    

    【讨论】:

    • 每次都从 Core Data 读取和纠正我的属性是否有意义?我只是觉得那是内存昂贵,不是吗?
    • 如果这不起作用,您能否对使用此方法有所了解:stackoverflow.com/questions/17801648/…
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多