小编Spl*_*eld的帖子

递归类设计模式:选项和最佳实践

亲爱的大家: 提前,感谢您的时间。

最近,我决定学习 Objective-C(我是 C-hacker 的老手),在阅读了 Kochan 优美的文字并深入研究 Apple 文档后,我仍然对实现递归类的最佳方法感到困惑(即. 一个类,其中 ivar 具有相同类的类型)。为了具体起见,假设我们希望实现一个二叉树类。首先,我们有一个基本的节点类,我已将其简化为:

@interface MMNode : NSObject {
    NSString *label;
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以用两种不同的方式实现我们的树。第一个(也是我认为更明显的方法)是将递归放在类本身中。

@interface MMTree : NSObject {
    MMNode *root;
    MMTree *leftTree;
    MMTree *rightTree;
}
@property (nonatomic, copy) MMNode *root;
@property (nonatomic, retain) MMTree *leftTree;
@property (nonatomic, retain) MMTree *rightTree;
Run Code Online (Sandbox Code Playgroud)

第二种方法,在美妙的CHDataStructures.framework 中使用,实现这个数据结构如下:

typedef struct MMTreeNode {
    MMNode *node;
//  union { 
//      struct { 
            struct MMTreeNode *leftTree;
            struct MMTreeNode *rightTree;
//      };
//  };
} MMTreeNode;


@interface MMTreeStruct : …
Run Code Online (Sandbox Code Playgroud)

recursion design-patterns class-design objective-c

5
推荐指数
1
解决办法
1773
查看次数