核心数据单身经理?


布偶的表弟派大星丶
2025-03-15 04:01:56 (8天前)
  1. 什么技术原因是没有单独一堂课来管理我的


核心
</跨度>

数据
</跨度>
?我现在正试图做出决定,如果我应该删除所有的样板

核心
</跨度>

数据
</跨度>
代码并在单例中重新实现它。

4 条回复
  1. 0# 日耀九洲 | 2019-08-31 10-32



    在决定单身人士是否适合您时,有两个重要的考虑因素(注意这些不是唯一的两个):




    1. 穿线


    2. 内存使用情况

    3. </醇>



      穿线
      </强>



      单身人士很方便,但如果你的应用程序使用多个线程,你可能会想写这样的东西:




      1. [[CDSingleton managedObjectContext] executeFetchRequest:someFetch];
        //later on a background thread you might write
        NSManagedObject *object = [[CDSingleton managedObjectContext] objectWithID:objectID];

      2. </code>


      在此之后不久,您的应用程序将崩溃,因为您访问了可能在其他线程的主线程上创建的managedObjectContext。




      内存使用情况
      </强>



      单身人士永远不会消失,这就是单身人士的观点。因此,他们也从不自愿地释放他们消耗的资源。在CoreData的情况下,这意味着托管对象上下文将继续在内存中保存托管对象,直到您调用-reset或-save:。



      如果您的应用使用大量数据,这可能会很糟糕。


  2. 1# 撩心 | 2019-08-31 10-32



    最佳做法是在视图控制器之间传递托管对象上下文。 Apple文档和示例就是这样做的。您永远不应该真正访问您的应用程序委托,不能访问Core Data,也不能访问任何内容。




    http://www.cimgf.com/2011/01/07/passing-around-a-nsmanagedobjectcontext-on-the-iphone/


  3. 2# 圈圈红 | 2019-08-31 10-32



    Xcode模板中应用程序委托中的样板代码在功能上实现为单例。应用程序对象是一个单例,它只维护一个委托对象,因此您只有一个Core Data堆栈实例,并且由于应用程序对象是普遍可访问的,因此您也可以始终访问应用程序委托。



    但是,即使只适用于具有一个持久存储的简单应用程序,其中所有上下文都使用该存储。在更复杂的应用程序中,您可能有多个商店或上下文,因此单身人士很快变得过于臃肿。



    单例通常不会为隐藏或保存重复编码带来太多复杂性,因为与Core Data有关的大部分编码都在控制器层中,您将模型链接到视图/接口。由于该逻辑通常是每个视图的自定义,因此您无法将其实际存放在单例中。



    我过去曾经使用过单身人士,但最终他们通常比他们的价值更麻烦。


登录 后才能参与评论