ただし、別のことを試すこともできます。数日前までは考えもしなかったことですが、たまたまCocoa With Loveを読んでいました。#define
リンクされた投稿で、彼は、マクロを呼び出した場所にシングルトンのクラス全体を「生成」するマクロをどのように作成したかについて説明しました。このための彼のコードをダウンロードできます(独自の実装に関するアイデアが得られるかもしれません)。
おそらく次のようなものです(警告:未テストのコード先):
#define SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(objectName, objectType) \
\
- (objectType *)objectName \
{ \
if(!objectName) \
{ \
objectName = [[objectType alloc] init]; \
} \
return objectName; \
} \
\
- (void)set##objectName:(objectType *)value \
{ \
[value retain]; \
[objectName release]; \
objectName = value; \
}
動作しますか?適切にテストする時間がないことをお詫びします。そのため、これは簡単なコピー/貼り付けソリューションではないことを公正な警告として受け止めてください. 申し訳ありません。うまくいけば、それはまだ役に立ちます!;)
使用例
これも機能するはずです警告:未テストのコードが先:
ヘッダ
// ....
@interface SomeClass : NSObject {
NSObject *someObj;
}
@end
実装
@implementation SomeClass
// ....
SYNTHESIZE_LAZY_INITIALIZER_FOR_OBJECT(someObj, NSObject);
// ....
@end