この単純なボイラープレートを繰り返すメソッドがたくさんあります。
- (id)myObject {
if(!_myObject) {
self.myObject = [_myObject.class new];
}
return _myObject;
}
したがって、これを単純なマクロに置き換えたいと思います。
#define default_init(instance) \
if(!instance) instance = [instance.class new]; \
return instance;
そのため、次のように呼び出すだけです。
- (id)myObject {
default_init(_myObject);
}
上記のコードは現在コンパイルされていますが、問題は、マクロがインスタンス変数の値を直接設定することです。代わりに、self.instance = value; を呼び出したいと思います。
だから代わりに
if(!instance) instance = [instance.class new];
次のようなものが欲しいです。
if(!instance) self.instance = [instance.class new];
しかし、明らかに現在のコードではこれが許可されていません。どうすればこのようなことを達成できますか?