objective-c - 比写几十个空的 getter 更好的方法?

标签 objective-c properties getter

我在我的属性上使用惰性实例化,以尽可能快地创建和使用我的类。为了实现这一点,我写了很多像这样的“空” setter/getter :

- (VMPlacesListFilter *)currentFilter
{
    if (!_currentFilter) {
        _currentFilter = [[VMPlacesListFilter alloc] init];
    }

    return _currentFilter;
}

都是一样的:如果实例变量是nil,调用属性类的-alloc-init ,然后返回实例变量。非常常见和直接。

如果我不自己创建这个 getter,Objective-C 的自动合成会为我创建一个 getter,它只做返回部分(如果实例变量为 nil,则不会初始化对象) ).

有什么办法可以避免编写这种样板代码吗?

最佳答案

不,如果你真的想要惰性初始化,恐怕没有好的解决办法。就个人而言,我通常会为可能真正耗时或内存密集型的东西(例如,加载图像或 View Controller )保存惰性初始化,并在 init 中初始化便宜的东西(如简单的数据结构或模型对象) .

- (instancetype) init {
    self = [super init];
    if( self ) {
        _cheapThing1 = [NSMutableArray array];
        _cheapThing2 = [[MyModelObject alloc] init];
    }
    return self;
}

- (ExpensiveThing*) expensiveThing
{
    if( _expensiveThing == nil ) {
        _expensiveThing = [[ExpensiveThing alloc] init];
    }
    return _expensiveThing;
}

除非您从磁盘或网络加载某些东西,否则我不会太担心初始化时间。当然,剖析它。

我知道这是一个 Objective-C 问题,但值得注意的是 Swift 内置了惰性初始化。

lazy var currentFilter = VMPlacesListFilter()

关于objective-c - 比写几十个空的 getter 更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775741/

相关文章:

ios - XMPPFramework - 存在不变

java - Jtable外观: How to write a code with jtable properties that can be use to multiple jtables to have a similar appearance?

properties - Kotlin 抽象 protected 属性(property)

java - 如何从 LinkedList 的对象访问 getter

ios - 如何在 didSelectRow 之后关闭 UISearchController?

ios - 与应用程序中只有 1 个屏幕的横向模式相关的问题

objective-c - 用未知数量的列填充 NSTableView

c# - 如何根据属性对 C# 列表进行排序?

dart - Dart:何时使用 setter/getter 与最终剂

javascript - ES6 : How to access a static getter from an instance