让我们说,如果已经存在的是否有一种方法在Objective-C中具有伪属性?
@property (strong, nonatomic) JJNode *leftChild;
@property (strong, nonatomic) JJNode *rightChild;
类属性和应用已经广泛使用的if (parent.leftChild) { ... }
和parent.leftChild = newNode
(getter和setter方法)。
但是,如果左右儿童可以用NSMutableArray
对象表示,那么该类可能会更好,因此该类可以在将来支持N-children,并且通过孩子循环更容易。
所以这将是
@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?
这是一个非常糟糕的主意。索引超出界限例外吗? –
但是,您可以拥有一个自定义实现的属性,只需在您的实现中定义'-setLeftChild:'方法 –