讓我們說,如果已經存在的是否有一種方法在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:'方法 –