如何处理Objective-C模型关系中的循环引用

时间:2014-08-25 11:15:30

标签: ios objective-c

我们说我有一个User模型和一个Post模型。 Post模型有一个UserUser模型可以有多个Post

现在在Post详细信息控制器中,我有一个Post和相应的Post.user。用户是一个强大的参考,因为如果它不是用户对象将不会留在内存中。我得到的后端响应是这样的:

    response of post/:id
    {
        post fields
        user: {user fields}
    }

Post详细控制器中,我还可以转到User详细控制器,其中User的数组Posts强烈保留在数组中。我必须将这些作为强有力的参考,因为否则他们不会留在记忆中。

现在我的问题是,用户对Posts列表的响应在响应中没有用户字段,因此对于每个Post,我必须链接回已经强烈引用Post

的用户

所以我的基本问题是,在某些情况下,我想要Post - >之间的关系。 Userstrong,而在其他情况下,我希望它为weak

目前,我在Post模型中有两个属性,一个是强大的,一个是弱的,根据情况,我设置了相应的属性。

但是有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

你需要考虑哪个对象“拥有”另一个。除了内存管理,这就是strongweak关键字所指示的内容。我会说User拥有Post s,因为拥有成千上万的帖子每个人拥有自己的用户会很奇怪 - 但是有数千名用户各自拥有自己的帖子才有意义

那么为什么不保留您遇到的用户的运行列表,每次找到其中一个帖子时,都会添加对相应User对象的强引用。每个帖子都会对创建它的用户有一个弱引用。这不会导致帖子过早释放,因为只要您保留用户列表,其中包含的所有帖子都将保留在内存中。

希望这有帮助!