我有财产
@property (strong, nonatomic, readonly) NSMutableArray* myArray;
我想在 getter 中懒惰地创建数组
- (NSMutableArray*)myArray
{
if(_myArray == nil)
{
_myArray = [NSMutableArray arrayWithCapacity:4];
}
return _myArray;
}
但这打破了 iVar (`_myArray) 的自动合成,否定了自动合成的一些好处,这意味着您必须以旧方式做事。
这是一种非常常见的模式,如果能自动合成一个惰性创建的 getter 版本会很好。我想这需要对 Objective-C 语言和编译器进行扩展,例如使用这样的附加属性:
@property (strong, nonatomic, readonly, lazycreate) NSMutableArray* myArray;
任何实现预定义类方法的类(以类似于此处描述的对象下标的方式),例如+ (ClassType*)defaultConstructor
可以支持lazycreate
属性属性和自动合成,然后可以在我的示例中合成 getter,如下所示:
- (NSMutableArray*)myArray
{
if(_myArray == nil)
{
_myArray = [NSMutableArray defaultConstructor];
}
return _myArray;
}
我对这需要语言扩展是对的,还是现在有一个聪明的方法来实现它?
这个想法有什么问题或陷阱吗?它们是什么?
我如何在 Objective-C 语言中提出这个想法?