私は (UML からの) コード生成の大ファンであり、Java の世界から来たので、Objective-C で自動化された双方向の関連付け管理をどのように実装するのだろうかと考えています。
アソシエーション パートナー <-> アドレスをイメージします。1 対多で、両端からナビゲートできます。私が達成したいのは、アドレスをパートナーに追加すると、そのアドレスオブジェクトはそのパートナーについて自動的に認識できるようになることです。
したがって、実装パターンは、パートナー側に NSMutableArray* を、アドレス側にパートナー* を配置することになります。setPartner:(Partner*)aPartner は、アドレスを管理するパートナーの NSMutableArray にアドレス (self) を自動的に挿入できるため、Address 側のプロパティは簡単に実装できます。ただし、もう一方の実装はそれほど簡単ではありません。Objective-C での to-many 参照の標準実装パターンは、@property の get メソッドを介して取得できる NSMutableArray のようです。この NSMutableArray を所有するオブジェクトは、Address オブジェクトを配列に挿入できますが、もちろん反対側は更新されません。
この種の関連付け管理には、たとえば addTo...() および removeFrom...() メソッドを介した他のパターンがあることを私は知っています。しかし、これが Cocoa プログラミングの他の原則に適合するかどうか、または Cocoa を効率的に使用することを妨げるかどうかはまだわかりません。ここでInterface Builderについて考えています。あまり経験はありませんが、ArrayController と呼ばれるものを見たことがあります。これは非常に便利ですが、NSMutableArray タイプのプロパティが動作することを期待しているようです。そして、この男が配列にオブジェクトを挿入した場合、私はそれをインターセプトして反対側の調整を行う必要があります。
Java プログラマーとして、私は NSMutableArray をサブクラス化し、そのメソッドのいくつかをオーバーライドして、反対側を操作する傾向があります。これはまったく可能でしょうか?カテゴリについて読みましたが、これまでのところ、この方法でクラスにメソッドを追加することしかできず、メソッドをオーバーライドしたり、その構造に追加したりできないことを理解しています。それとも、メソッド転送にする必要がありますか? 私は今混乱しています。あなたが私を正しい考え方に向けることができれば、それはとても素晴らしいことです. どうもありがとう!