有没有办法在Objective-C中拥有伪属性?

时间:2012-09-11 00:04:49

标签: objective-c properties

如果已经有

的类属性,请说
@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.leftChildparent.leftChild = newNode吗?

我想知道这是不是一个好习惯,因为看起来parent.leftChild(JJNode *)[parent objectAtIndex: 0]是不同的对象,但实际上是同一件事。但是如果我们继续这样做,我们可以通过伪属性来实现吗?

似乎我们实际上可以使用@property (strong, nonatomic) JJNode *leftChild;并更改getter和setter来实际使用数组,但是会有两个额外的实例变量。可以在没有ivars的情况下完成吗?或者我们可以定义2个方法,以便parent.leftChild = newNode实际调用某个setter方法,parent.leftChild将调用getter吗?

1 个答案:

答案 0 :(得分:4)

您的属性不仅限于合成属性 - 实际上,它们只不过是遵循某种命名约定的一对方法。

您可以删除@synthesizeleftChild的{​​{1}}说明,并将其替换为获取/设置rightChild的第一个和第二个元素的方法在有两个以上的情况下保存节点。