我正在使用核心数据,其中我有对象A,它与对象B有一对多的关系。实际上,可能有1000个B与一个A相关。
我担心的是,当我定义一对多关系的逆时,对象A将有一个包含1000个对象的NSSet。我知道这些对象在被访问之前会出现故障,但仍然会分配1000个精简的B包装器对象。
我从不想从A中访问B对象。我唯一能想到的是,当我删除A时,它允许我对B进行级联删除,这是我想要的。
有没有定义我错过的反向关系的缺点?另外,也许我不应该关心每个对象A的1000个故障对象的内存使用情况?
更新 事实证明,反向关系最终导致了我的问题。基本上,因为我在主线程上使用Core Data,当我的应用程序启动时,Core Data基本上会锁定应用程序,将所有这些对象加载到主线程的内存中。
我想出的解决方案是创建一个新版本的对象A,它将一个id存储到对象B,而不是存储对象B的引用。这样就可以消除浪费的内存,使所有出现故障的对象处于反向关系中,从而消除了首次使用时对象的巨大分配。
答案 0 :(得分:0)
没有指定反转有许多缺点。您将获得较差的性能,核心数据需要更加努力,并且存在完整性问题。
始终,始终,始终存在反向关系。即使你永远不会使用它,Core Data也会。
如果不直接使用,则不会出现内存问题。没有理由避免反向关系。