Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 保留对核心数据对象的引用是否不好?_Ios_Objective C_Core Data - Fatal编程技术网

Ios 保留对核心数据对象的引用是否不好?

Ios 保留对核心数据对象的引用是否不好?,ios,objective-c,core-data,Ios,Objective C,Core Data,在视图控制器的生命周期内,将对托管对象的引用保留在视图控制器中是否是一种不好的做法 我对核心数据比较陌生,最近我发现不能将来自不同上下文的托管对象混合在一起,例如,如果对象不属于您的上下文,就不能将它们添加到关系中 例如,假设我们有一个经典的Employee实体和一个EmployeeDetailsViewController,它保持对Employee对象的强引用 我应该存储员工的ID而不是employee对象吗?使用ID而不是域对象似乎很不方便,所以我想知道通常是怎么做的。因为您不会忘记您已经存

在视图控制器的生命周期内,将对托管对象的引用保留在视图控制器中是否是一种不好的做法

我对核心数据比较陌生,最近我发现不能将来自不同上下文的托管对象混合在一起,例如,如果对象不属于您的上下文,就不能将它们添加到关系中

例如,假设我们有一个经典的
Employee
实体和一个
EmployeeDetailsViewController
,它保持对
Employee
对象的强引用


我应该存储员工的ID而不是
employee
对象吗?使用ID而不是域对象似乎很不方便,所以我想知道通常是怎么做的。

因为您不会忘记您已经存储了对象,所以没关系。
在我的大多数应用程序中,我都喜欢这样。我在开始时选择了一个主用户,然后将其保存在rootController中,以避免对CoreData调用过多,因为它在程序使用期间不会更改


如果应用程序中的实体发生更改,您需要从CoreData更新保存的对象。

欢迎来到Core Data世界

首先,您的应用程序中可能有太多的
NSManagedObjectContext
实例。您的整个用户界面应该运行在一个上下文中。这将解决你们的关系问题

至于保留引用,除非有可能从另一个线程中删除该对象,否则保留引用没有问题。如果您在后台线程上进行删除(例如从网络操作中删除),那么您可能不希望保留对这些对象的强引用,因为这会使您陷入困境


为一种更改(例如来自服务器的内容)和另一种更改(例如通过UI进行的用户更改)设置单独的上下文是一个好主意吗?我正在开发一个具有“同步脱机更改”功能的应用程序,并试图找出如何分别跟踪这两种类型的更改,例如,如果用户修改了同一对象,来自服务器的更改将被丢弃。(你也可以看看我关于同步的另一个问题)(多冗长的评论啊!)

所以我的生活准则是:

  • 如果用户界面;主队列上下文。没有例外
  • 如果不是UI;专用队列上下文。没有例外
我通常将我的私有队列上下文作为主队列上下文的子级,以减少需要处理的代码量和合并

因此,服务器同步不是UI,应该在私有子上下文中运行


请继续观看我的演讲,进行更深入的讨论。

这是一个复杂的话题,有很多解决方案。我认为安全的答案是保持<代码> Objult s,而不是对象。我不会考虑这种糟糕的做法,事实上它相当常见(考虑到核心数据对象在低内存情况下变成了错误,并且当它们不再被使用时)。但是你所采用的解决方案实际上应该取决于项目的需求。这可能会引起你的兴趣,最后一句话是不相关的。如果您必须不断地对对象进行错误处理,那么效率自然会降低,但是一旦加载,您就使用标准属性,并且无法直接访问核心数据属性。对于一种更改(例如来自服务器的内容)和另一种更改(例如通过UI进行的用户更改),使用单独的上下文是否是一个好主意?我正在开发一个具有“同步脱机更改”功能的应用程序,并试图找出如何分别跟踪这两种类型的更改,例如,如果用户修改了同一对象,来自服务器的更改将被丢弃。(你也可以看看我关于同步的另一个问题)(多么冗长的评论!)答案中对你冗长问题的简单回答更新:)