Stunner 很好地解释了不需要分配已经创建的 init 对象。
但如果它是一个不存在的对象,你将在哪里创建它?我提到的一个非常常见的模式是延迟实例化,因为您在帖子中提到了它。
所以你想要一个 NSMutableArray 属性。您可以在使用它之前在某些方法中分配初始化它,但是您必须担心“在我需要我的数组之前是否调用了该方法?” 或“我是否会不小心再次调用它并重新初始化它。”
所以一个故障安全的地方是在属性的吸气剂中。每次访问该属性时都会调用它。
.h
@property (nonatomic, strong) NSMutableArray* myArray;
.m
@synthesize myArray = _myArray;
- (NSMutableArray*)myArray
{
if (!_myArray) {
_myArray = [[NSMutableArray alloc] initWithCapacity:2];
}
return _myArray;
}
每次访问该属性时,它都会显示“myArray 是否存在?如果不存在,请创建它。如果存在,则返回我所拥有的。”
此外,这种设计模式的另一个好处是,在您需要资源之前,您不会创建资源,而不是在视图控制器加载或应用程序启动时一次性创建它们,这取决于需求,可能需要几个秒。