我已经很久没有实现二进制了,最近有一个要求(为了演示一些代码),我开始使用:
@interface NSNode : NSObject
@property (strong, nonatomic) NSNode *leftChild;
@property (strong, nonatomic) NSNode *rightChild;
但后来,似乎每当我需要对两个节点做某事时,我都需要写两次——一次给左孩子,一次给右孩子,除非我把需要做的事情变成一个额外的方法, 并仔细传递正确的参数——为了实现这一点,会有很多额外的方法。
如果它是通过使用 NSMutableArray 完成的
typedef enum {
NSNodeLeft = 0,
NSNodeRight
} NSNodeLeftOrRightSide;
@interface NSNode : NSObject
@property (strong, nonatomic) NSMutableArray *children;
然后我总是可以使用循环对两个节点做一些事情:
for (NSNode *node in self.children) {
// do something
}
或者如果需要一个索引来判断它是左孩子还是右孩子:
[self.children enumerateObjectsUsingBlock:
^(NSNode *node, NSUInteger nodeIndex, BOOL *stop) {
// do something
}
];
并且nodeIndex
可以用来确定它是左孩子还是右孩子。
更重要的是,这个类可以很容易地扩展到具有 N 个孩子的树。这实际上是一个更好的做法吗?除了使用数组的性能非常小之外,还有什么缺点吗?(我之所以选择NSMutableArray
不是,是NSArray
因为如果我们需要制作这个 N-children,我们不需要将其更改为NSMutableArray
所有地方)。