Obj-C的内存管理属性,引用父节点类

时间:2014-01-10 13:24:12

标签: objective-c memory-management

我有两个相互引用的类:

下面看到的一个类有一个属性,它将保存第二个类的数组:

@interface MPReportBuilderTableRecord : MPRecord

// NSArray of MPReportBuilderTableColumnRecord objects
@property (retain) NSMutableArray *tableColumns; 

@end

然而,第二个类包含一个属性,该属性等于该父对象的“父节点”或“所有者”。

@interface MPReportBuilderTableColumnRecord : MPRecord

// Reference to Parent Node/Object
@property (assign) MPReportBuilderTableRecord *parentTable;

@end

我的问题是:

  1. 您将这个概念以及子对象属性与父对象属性之间的关系称为什么
  2. 由于这些引用,我遇到了一些内存泄漏周期。什么是parentTable属性的适当内存分配?

2 个答案:

答案 0 :(得分:2)

GOF Book调用模式Composite

当使用引用计数所有权(无论是ARC还是MRC)时,通常最好使子节点不指向父节点或使关联变弱。

这就是你通过指定parentTable属性来使用assign语义所做的。发布的代码中没有内存问题。

答案 1 :(得分:1)

  

您将这个概念和子对象属性与父对象属性之间的关系称为什么

亲子关系。

  

由于这些引用,我遇到了一些内存泄漏周期。什么是parentTable属性的适当内存分配?

您需要确定父级是否在逻辑上拥有子级,反之亦然。我几乎总是决定“父母拥有孩子”的规则。然后,子项的父属性应该是弱属性(或者,如果不使用ARC,则赋值)。