相关疑难解决方法(0)

iOS上的线程安全延迟初始化

我有一个视图控制器,我想懒洋洋地初始化,一旦初始化,尽可能使用相同的副本(我不使用单例,因为我想最终从内存中删除它),我使用getter这样做,我的代码看起来像这样:

@property (retain) UIViewController *myController

...

@synthesize myController = _myController;


...


- (UIViewController *)myController
{
    if (!_myController) {                                 // Evaluation
        _myController = [[MyViewController alloc] init];  // Object Creation
    }
    return _myController;
}
Run Code Online (Sandbox Code Playgroud)

这可行,但它不是线程安全的,如果在创建对象之前多个线程评估为true,我将有内存泄漏.我尝试过的一个解决方案是@synchronized代码,但我不确定正确的方法.

这似乎工作,(lockForMyController是一个简单的NSString)但它使这部分代码慢了很多:

 - (UIViewController *)myController
{
    @synchronized(self.lockForMyController){
        if (!_myController) {
            _myController = [[MyViewController alloc] init];
        }
    }
    return _myController;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有其他方法来实现延迟初始化,线程安全,属性?

lazy-loading thread-safety ios

6
推荐指数
1
解决办法
3614
查看次数

标签 统计

ios ×1

lazy-loading ×1

thread-safety ×1