Tag: 线程安全性

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

我有一个视图控制器,我想懒惰地初始化,一旦初始化,尽可能使用相同的副本(我不使用单身,因为我最终要从内存中删除它),我使用getter来这样做,我的代码看起来像这样: @property (retain) UIViewController *myController … @synthesize myController = _myController; … – (UIViewController *)myController { if (!_myController) { // Evaluation _myController = [[MyViewController alloc] init]; // Object Creation } return _myController; } 这是有效的,但它不是线程安全的,如果在创build对象之前有多个线程求值为true,那么我会发生内存泄漏。 我试过的一个解决scheme是@synchronized的代码,但我不知道正确的方法来做到这一点。 这似乎工作,(lockForMyController是一个简单的NSString),但它使这部分的代码慢很多: – (UIViewController *)myController { @synchronized(self.lockForMyController){ if (!_myController) { _myController = [[MyViewController alloc] init]; } } return _myController; } 我想知道是否有其他的方式来实现一个懒惰的初始化,线程安全的属性?