enn*_*ler 1 iphone singleton objective-c
任何人都可以解释为什么在这里找到的示例iphone应用程序LocateMe中使用MyCLController类的单例实例
以及保留,retainCount,release和autorelease的覆盖?任何帮助将非常感谢!!
因为在应用程序中只需要一个MyCLController实例.
该示例中的单例实现是超级防御模式.它会覆盖所有其他方法,以防止您可能释放实例.
就个人而言,我从来没有经历过这样的箍(并且文档将来会被更改),而是更喜欢做一个死的简单+ sharedInstance方法:
+ sharedInstance
{
static id sharedInstance = nil;
if (!sharedInstance) {
sharedInstance = [self alloc];
sharedInstance = [sharedInstance init];
}
return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
(1)是的,我故意打破了alloc/init.它允许-init方法中的任何内容调用+ sharedInstance而不会出现问题.
(2)不,这不涉及多线程.为此,我使用GCD的dispatch_once().在iPhone上,你需要一个稍微不同的模式.@synchronized()有效,但是开销很大.
我之所以发现超级防御模式令人不安的原因之一就是因为,坦率地说,如果你有一个单例类并且你通过过度释放导致它被解除分配,那么你的代码就会被破坏而且那种bug应该不会被遮盖了.如果有的话,代码应该是灾难性的失败.同样,在许多情况下,单例类也可能对单个实例有效.
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |