ios - 在 Objective-C 中动态创建对象

标签 ios objective-c

我想批评一下我用来创建对象的以下方法:

在接口(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/

    相关文章:

    iOS 在同一请求中发送 POST 和 GET

    ios - UICollectionView 流布局问题

    iphone - 设置 UIButton 实例突出显示

    ios - XMPPFramework - 如何创建 MUC 房间并邀请用户?

    ios - 如何让 dispatch_async 运行

    mysql - 如何基于带有 mysql 数据的事件创建自动任务计划 ios 通知

    ios - 正确的 Realm 使用模式/最佳实践?

    xcode - 是否可以在 iPhone 模拟器中录制和播放音频?

    ios - 如何调用 NSTimer 直到选择器成功

    ios - UILabel 未显示在自定义 UIView 屏幕中