使用核心数据实例化自定义对象

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(此代码有啥问题)?

我应该如何将对象实例导入核心数据?

自定义异常

php学习日记1(关于Thinkphp框架中D的含义和用法)

在界面生成器中使用现有的自定义 UIView