我想批评一下我用来创建对象的以下方法:
在接口(interface)文件中:
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;
}
/编辑
练习的要点是在 getter 内部使用了 setter。我已经将它用于所有类型的对象(ViewController、无数其他类型等)。我得到的优势是:
(例如,一个应用中有 6-7 个 View ,只有一个被创建在
开始)。
问题:
最佳答案
这种模式通常用作延迟加载技术,即仅在第一次请求时才创建对象。
如果延迟创建的对象需要大量计算来创建,并且在时间紧迫的情况下被请求(在这种情况下,使用这种技术没有意义),这种方法可能会有一个缺点。但是我会说,如果对象可以快速创建,这是一件足够合理的事情。
关于ios - 在 Objective-C 中动态创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407049/