【问题标题】:Using bidirectional weak pointers使用双向弱指针
【发布时间】:2015-10-19 21:35:46
【问题描述】:

我发现自己陷入了一个小难题。 我有一种情况,我可能会在两个同级级别对象之间创建循环依赖关系。我希望两者都留在内存中,并且没有一个实例比另一个更重要/更不重要。我应该任意让一方的指针变弱,而另一方的指针变强,还是我可以让双方都变弱而侥幸?

假设您有一个具有这样结构的对象模型...

ADatabaseTable
   -(NSArray)fields
       FieldInfo  (field A)
       FieldInfo  (field B)
   -(NSArray)values
       FieldValue (field A - record 1)
       FieldValue (field A - record 2)
       FieldValue (field B - record 1)
       FieldValue (field B - record 2)

...并且您希望 FieldValue 具有对 FieldInfo 的引用,反之亦然。

您将如何指定属性属性(弱/强)以使它们相互引用?

谢谢

【问题讨论】:

  • 哪些事件会让您想从表中删除FieldValue?哪些事件会让您想要删除 FieldInfo
  • 好吧,我猜应用程序正在关闭,或者显示此信息的视图消失了。
  • 让父 table 拥有这两个兄弟姐妹来定义它们的生命周期是否合理?你有没有父表的FieldInfoFieldValue
  • 他们总是有一个父表。我只是考虑从“FieldValue”返回到其FieldInfo 或反之亦然的便利性,而不是每个人都必须遍历表并让表执行某种枚举数组以找到相应的对象。
  • 是否应该在视图消失时释放整个 ADatabaseTable 及其所有子项?还是视图只显示单个字段或值?

标签: ios objective-c weak-references


【解决方案1】:

大概ADatabaseTablefields 数组和values 数组有很强的引用。

普通的NSArray 保持对其元素的强引用,因此您不必担心数组中的元素会消失。

因此您可以使信息和值相互弱引用。

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2014-08-16
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2020-12-20
    • 2011-06-03
    • 2019-04-19
    • 2020-11-15
    相关资源
    最近更新 更多