我有两个相互引用的类:
下面看到的一个类有一个属性,它将保存第二个类的数组:
@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
我的问题是:
答案 0 :(得分:2)
GOF Book调用模式Composite。
当使用引用计数所有权(无论是ARC还是MRC)时,通常最好使子节点不指向父节点或使关联变弱。
这就是你通过指定parentTable
属性来使用assign
语义所做的。发布的代码中没有内存问题。
答案 1 :(得分:1)
您将这个概念和子对象属性与父对象属性之间的关系称为什么
亲子关系。
由于这些引用,我遇到了一些内存泄漏周期。什么是parentTable属性的适当内存分配?
您需要确定父级是否在逻辑上拥有子级,反之亦然。我几乎总是决定“父母拥有孩子”的规则。然后,子项的父属性应该是弱属性(或者,如果不使用ARC,则赋值)。