想象一下,你有一个像这样的递归对象结构:
MyComposite *c = [MyComposite compositeWithName:@"Jack"];
// add/append some children ...
do
{
// do something with the current composite
...
// continue traversal
c = [c child];
}while ( c );
这种遍历在内存管理方面是否有效?
答案 0 :(得分:3)
从理论上讲,这并没有错。但是:
NSArray
或NSSet
,而不编写自己的链表类。请注意,NSArray
实际上并不是标准意义上的数组。例如,在中间插入对象并不是非常慢。 WTP
所述,您没有为getter get...
命名。如果属性名称为foo
,则getter名为foo
,setter名为setFoo:
。它主要是一种约定,但Cocoa系统的某些部分依赖于这种约定。所以,当你读完这句话后,立即重命名你的方法。答案 1 :(得分:2)
是的没关系。 c是指向MyComposite实例的局部变量。将另一个MyComposite指针值重新分配给c对原始MyComposite实例没有任何影响。
在参考Yuji的答案时,你不应该使用NSArray或NSSet来存储递归数据结构,你的数据结构很好。 NSArray和NSSet是为平面数据集设计的,除了在NSArray的情况下强制执行线性排序之外,不能指定其成员之间的任何关系。