我想下面的方法我用它来创建对象的批判:创建对象
在接口文件:
MyClass * _anObject;
...
@property (retain, nonatomic) MyClass * anObject;
在实现文件:
@property anObject = _anObject
到目前为止,这么简单。现在让我们来替代默认的getter:
(MyClass *) anObject {
if(_anObject == nil) {
self.anObject = [[MyClass alloc] init];
[_anObject dowWhateverInitAction];
}
return _anObject;
}
编辑: 我原来的问题是关于只创建(而不是在整个生命周期)的对象,但我添加以下,这样它不” Ť通过关闭任何一个:
- (void) dealloc {
self.anObject = nil;
}
/EDIT
的工作的主要一点是,设置器吸气剂的内部使用。我已经将它用于所有类型的对象(ViewController,其他类型等)。我得到的优点是:
- 仅在需要时才创建对象。它使应用相当快 (例如,在应用中有6-7个视图,只有一个在 开始创建)。
- 我不必担心在使用它之前创建对象......它会自动发生。
- 我不必担心第一次需要对象的位置......我只能访问对象,就好像它已经存在一样,如果不存在,它就会被创建为新的。
问题:
- 是否恰好是一个既定的模式?
- 你看到这样做的缺点吗?
很常见的模式,通常称为延迟初始化。 – omz
你打开ARC吗?如果你不这样做,那么就有内存泄漏。在用'self.anObject'语法将实例变量赋值给''[MyClass alloc] init]'后,你需要释放你创建的对象。你在做什么是大多数情况下推荐的模式。 –
我个人不喜欢带副作用的吸气剂。是的,懒加载是常见的,但我完全不会使用它遍布我的应用程序,但只能用于包含许多子视图的视图(已由UIViewController完成)。 – Till