1

のクラスプロパティが既に存在するかどうかを考えてみましょう

@property (strong, nonatomic) JJNode *leftChild;
@property (strong, nonatomic) JJNode *rightChild;

アプリは既にif (parent.leftChild) { ... }and parent.leftChild = newNode(getter と setter の両方) を広範囲に使用しています。

NSMutableArrayしかし、クラスが将来 N 個の子をサポートできるように、左と右の子をオブジェクトで表すことができれば、クラスはより適切に機能する可能性があり、子のループはより簡単になります。

そうなる

@property (strong, nonatomic) NSMutableArray *childrenArray;

場合によっては、子を次のように繰り返すことができます。

for (JJNode *node in self.childrenArray) { ... }

しかし、この新しい配列を使用して、引き続きparent.leftChildandを使用できるparent.leftChild = newNodeでしょうか?

parent.leftChild異なるオブジェクトのように見えるかもしれません(JJNode *)[parent objectAtIndex: 0]が、実際には同じものなので、それは良い習慣なのだろうか。しかし、先に進んでそれを行う場合、それを達成するための疑似プロパティを使用できますか?

ゲッターとセッターを実際に使用および変更して、実際に配列を使用できるように見え@property (strong, nonatomic) JJNode *leftChild;ますが、2 つの追加のインスタンス変数が存在します。ivarなしでそれを行うことはできますか?または、2 つのメソッドを定義して、parent.leftChild = newNode実際にセッター メソッドparent.leftChildを呼び出し、ゲッター メソッドを呼び出すことはできますか?

4

1 に答える 1

4

プロパティは合成されたものに限定されません。実際、それらは特定の命名規則に従うメソッドのペアにすぎません。

およびの@synthesize命令を削除し、2 つ以上のノードがある場合にノードを保持するの最初の要素と 2 番目の要素を取得/設定するメソッドに置き換えることができます。leftChildrightChildNSArray

于 2012-09-11T00:11:21.113 に答える