有人可以在Apple文档中向我解释有关Singleton实现的一些内容。
转到链接中的创建单例实例。
我尝试但无法理解一些事情: -
如果有人可以在这里简要解释一下allocWithZone和sharedManager方法的工作,那么很多问题都会自动得到解答。
答案 0 :(得分:2)
该实施通常被认为是过度杀伤。对程序员试图误用单身人士有很多保护措施,这通常被认为是不必要的。
以下是Yoga更简单实现的示例:
+ (id)sharedFoo
{
static dispatch_once_t once;
static MyFoo *sharedFoo;
dispatch_once(&once, ^ { sharedFoo = [[self alloc] init]; });
return sharedFoo;
}
答案 1 :(得分:2)
接下来 - 我已经解释了你的问题:
[super allocWithZone:NULL]
做了什么?
这与说[super alloc]
相同。 withZone
部分与存储对象的内存位置有关。在实践中,使用它是非常罕见的。有关详细信息,请参阅此问题 - what is difference between alloc and allocWithZone:?
为什么
retain
方法返回自身(并且不增加保留计数器)
单身人士在你的申请期间一直保持活着 - 你不关心保留计数,因为你没有想要解除你的单身人士的情况。 retain
返回self
作为礼貌和约定(并允许嵌套表达式)。
如果Singleton中有一些实例变量,那么它们应该在哪里初始化?
由你决定。通常,您可以按照普通对象在init
方法中初始化它们。