編集 2: Kurt のソリューションに加えて、もう 1 つの方法があります。このページの最後、コメントの直前を見てください: http://www.friday.com/bbum/2009/09/11/class-extensions-explained/
編集: クラス カテゴリのクラス メソッドは、クラス拡張によって実装される ivar やプライベート メソッドなどのプライベート メンバーにアクセスできないようです。
この質問が以前に尋ねられて回答されていないことを願っていますが、stackoverflow と Google 検索の両方が、クラス メソッドから ivar に直接アクセスするように求める種類の質問でブラウザー ウィンドウをスパムするため、1 つを見つけることができませんでした。これは明らかに私の意図ではありません。
問題にまっすぐに、私が達成しようとしていることを要約したコードを提供します。
XYZPerson.h:
@interface XYZPerson : NSObject
@property (weak, readonly) XYZPerson *spouse;
@end
XYZPersonMariage.h:
@interface XYZPerson (XYZPersonMariage)
+(BOOL)divorce:(XYZPerson *) oneOfSpouses;
@end
XYZPersonMariage.m
+(BOOL)divorce:(XYZPerson *)oneOfSpouses
{
XYZPerson *otherSpouse = [oneOfSpouses spouse];
if(otherSpouse != nil)
{
oneOfSpouses->_spouse = nil;
otherSpouse->_spouse = nil;
return true;
}
return false;
}
読み取り専用のフラグが設定されたプロパティに対してivarが自動的に合成されないのではないかと最初に考えましたが、実際には合成されています。
では、仕事を成し遂げるにはどのような道をたどればよいのでしょうか?