我从github下载了一个库,并注意到在库的主要单例中,这段代码可能存在泄漏:
+(DDGameKitHelper*) sharedGameKitHelper
{
@synchronized(self)
{
if (instanceOfGameKitHelper == nil)
{
[[DDGameKitHelper alloc] init];
}
return instanceOfGameKitHelper;
}
return nil;
}
现在显然在任何地方都没有发布或自动发布,所以我必须这样做,但是如何以及以何种方式正确?我已经在Internet上查看了各种Singleton设计模式,他们只是将instanceOfGameKitHelper分配给alloc和init行。
无论如何,我如何妥善解决这个问题?
谢谢!
答案 0 :(得分:2)
根据定义,单例创建一次,永不释放。可以把它想象成一个全局变量。
请查看Apple的此文档:Cocoa Core Competencies - Singleton了解更多详情。
我通常使用@ rmaddy的方法。当然,即使这样,你仍然会分配变量并且永远不会释放变量,因为它仍然是单身。
答案 1 :(得分:2)
设置单身人士的更现代的方法是这样的:
+ (DDGameKitHelper *)sharedGameKitHelper {
static DDGameKitHelper *instance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{ instance = [self new]; });
return instance;
}