【发布时间】:2014-04-02 09:24:01
【问题描述】:
我想创建单例,但不确定使用什么:dispatch_once 或@syncronized。
我的问题是:如果我在一个视图控制器上创建单例对象(使用 GCD),然后我转到另一个视图控制器,ARC 会破坏我的单例对象吗?如果我将在另一个视图控制器中再次需要它,我可以再次创建它吗?
【问题讨论】:
标签: ios singleton automatic-ref-counting grand-central-dispatch
我想创建单例,但不确定使用什么:dispatch_once 或@syncronized。
我的问题是:如果我在一个视图控制器上创建单例对象(使用 GCD),然后我转到另一个视图控制器,ARC 会破坏我的单例对象吗?如果我将在另一个视图控制器中再次需要它,我可以再次创建它吗?
【问题讨论】:
标签: ios singleton automatic-ref-counting grand-central-dispatch
如果你创建正确,没有人会破坏它,除了杀死应用程序,因此单例应该只用于非常特定的任务。
这就是我使用 ARC 创建单例的方式,它是一个类方法
+ (instancetype)sharedInstance
{
static dispatch_once_t pred = 0;
__strong static id _sharedObject = nil;
dispatch_once(&pred, ^{
_sharedObject = [[self alloc] init];
});
return _sharedObject;
}
在您的类上调用 +sharedInstance 将确保始终返回相同的对象
【讨论】: