这样遍历对象图在objective-c中有效吗?

这样遍历对象图在objective-c中有效吗?,objective-c,Objective C,假设您有如下递归对象结构: MyComposite *c = [MyComposite compositeWithName:@"Jack"]; // add/append some children ... do { // do something with the current composite ... // continue traversal c = [c child]; }while ( c ); 从内存管理的角度来看,这种遍历有效吗?理论上,这没有错。

假设您有如下递归对象结构:

MyComposite *c = [MyComposite compositeWithName:@"Jack"];

// add/append some children ...    

do
{
  // do something with the current composite
  ...
  // continue traversal
  c = [c child];
}while ( c );

从内存管理的角度来看,这种遍历有效吗?

理论上,这没有错。然而:

通常在Objective-C中,只使用NSArray或NSSet,而不编写自己的链表类。请注意,NSArray实际上不是标准意义上的数组。例如,在中间插入对象不是很慢。 正如WTP所说,你不知道获得者的名字。。。。如果属性名为foo,则getter仅命名为foo,setter命名为setFoo:。这在很大程度上是一项公约,但可可体系的某些部分依赖于这项公约。所以,读完这句话后,立即重命名你的方法。
理论上说,这没什么错。然而:

通常在Objective-C中,只使用NSArray或NSSet,而不编写自己的链表类。请注意,NSArray实际上不是标准意义上的数组。例如,在中间插入对象不是很慢。 正如WTP所说,你不知道获得者的名字。。。。如果属性名为foo,则getter仅命名为foo,setter命名为setFoo:。这在很大程度上是一项公约,但可可体系的某些部分依赖于这项公约。所以,读完这句话后,立即重命名你的方法。
是的,很好。c是指向MyComposite实例的局部变量。将另一个MyComposite指针值重新指定给c不会对原始MyComposite实例产生任何影响


参考Yuji的答案,您不应该使用NSArray或NSSet来存储递归数据结构,因为您的数据结构很好。NSArray和NSSet是为平面数据集设计的,在NSArray的情况下,除了强制执行线性排序之外,不能指定其成员之间的任何关系。

可以。c是指向MyComposite实例的局部变量。将另一个MyComposite指针值重新指定给c不会对原始MyComposite实例产生任何影响


参考Yuji的答案,您不应该使用NSArray或NSSet来存储递归数据结构,因为您的数据结构很好。NSArray和NSSet是为平面数据集设计的,在NSArray的情况下,除了强制执行线性排序外,不能指定其成员之间的任何关系。

取决于子对象的分配类型,并且如果父对象在@dynamic或@property中被适当地保留和释放…父对象是弱属性非原子、赋值、,child是一个非原子属性,我只是想知道,如果将c.child指定给cIt,图形是否会受到干扰。命名一个getter get是非常不客观的,但这不是问题的焦点。取决于子对象的分配类型,如果父对象被适当地保留和释放@dynamic或@property…父对象是弱属性非原子,赋值,子对象是属性非原子,我只是想知道,如果将c.child指定给cIt,图形是否会受到干扰,那么命名一个getter get是非常不客观的……是的,我知道,但这不是问题的焦点。