如果已经有
的类属性,请说@property (strong, nonatomic) JJNode *leftChild;
@property (strong, nonatomic) JJNode *rightChild;
该应用已广泛使用if (parent.leftChild) { ... }
和parent.leftChild = newNode
(getter和setter)。
但是,如果左右孩子可以用NSMutableArray
对象表示,那么这个类可能会更好地工作,这样该类可以在将来支持N个子项,并且循环遍历子项更容易。
所以它将是
@property (strong, nonatomic) NSMutableArray *childrenArray;
在某些情况下,孩子可以通过
进行迭代for (JJNode *node in self.childrenArray) { ... }
但是使用这个新数组,我们仍然可以继续使用parent.leftChild
和parent.leftChild = newNode
吗?
我想知道这是不是一个好习惯,因为看起来parent.leftChild
和(JJNode *)[parent objectAtIndex: 0]
是不同的对象,但实际上是同一件事。但是如果我们继续这样做,我们可以通过伪属性来实现吗?
似乎我们实际上可以使用@property (strong, nonatomic) JJNode *leftChild;
并更改getter和setter来实际使用数组,但是会有两个额外的实例变量。可以在没有ivars的情况下完成吗?或者我们可以定义2个方法,以便parent.leftChild = newNode
实际调用某个setter方法,parent.leftChild
将调用getter吗?
答案 0 :(得分:4)
您的属性不仅限于合成属性 - 实际上,它们只不过是遵循某种命名约定的一对方法。
您可以删除@synthesize
和leftChild
的{{1}}说明,并将其替换为获取/设置rightChild
的第一个和第二个元素的方法在有两个以上的情况下保存节点。