使用核心数据实例化自定义对象
Posted
技术标签:
【中文标题】使用核心数据实例化自定义对象【英文标题】: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
这会导致核心数据/内存问题吗?
【问题讨论】:
【参考方案1】:不,有几个原因:
您不能将init
与托管对象一起使用。指定的初始化程序是initWithEntity:insertIntoManagedObjectContext:
。 NSEntityDescription
上还有一个便利构造函数,名为 insertNewObjectForEntityForName:inManagedObjectContext:
。如果您不使用其中之一,就会遇到问题。
当您分配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 读取和纠正我的属性是否有意义?我只是觉得那是内存昂贵,不是吗? 如果这不起作用,您能否对使用此方法有所了解:***.com/questions/17801648/…以上是关于使用核心数据实例化自定义对象的主要内容,如果未能解决你的问题,请参考以下文章
从 XIB 问题动态实例化自定义 UIView(此代码有啥问题)?