私は財産を持っています
@property (strong, nonatomic, readonly) NSMutableArray* myArray;
ゲッターで配列を怠惰に作成したい
- (NSMutableArray*)myArray
{
if(_myArray == nil)
{
_myArray = [NSMutableArray arrayWithCapacity:4];
}
return _myArray;
}
ただし、これによりiVar( `_myArray)の自動合成が機能しなくなり、自動合成の利点の一部が無効になります。つまり、古い方法で処理を行う必要があります。
これは非常に一般的なパターンであり、レイジー作成バージョンのゲッターを自動合成すると便利です。これには、Objective-C言語とコンパイラの拡張が必要だと思います。たとえば、次のような追加のプロパティ属性を使用します。
@property (strong, nonatomic, readonly, lazycreate) NSMutableArray* myArray;
プロパティ属性をサポートし、自動合成などの事前定義されたクラスメソッド(ここで説明するオブジェクトの添え字と同様の方法)を実装するクラスは、次のように私の例でゲッターを合成できます。+ (ClassType*)defaultConstructor
lazycreate
- (NSMutableArray*)myArray
{
if(_myArray == nil)
{
_myArray = [NSMutableArray defaultConstructor];
}
return _myArray;
}
これには言語拡張が必要になるのは正しいですか、それとも今それを達成するための賢い方法はありますか?
このアイデアに問題や落とし穴はありますか?それらは何ですか?
このアイデアをObjective-C言語に提案するにはどうすればよいですか?