+ (WAController*) sharedWAController {
@synchronized([WAController class]) {
if (!_sharedWAController)
[[self alloc] init];
return _sharedWAController;
}
}
这是展现在潜在的泄漏 为[[self alloc] init];
对象的潜在泄漏分配
为什么它的泄漏?
+ (WAController*) sharedWAController {
@synchronized([WAController class]) {
if (!_sharedWAController)
[[self alloc] init];
return _sharedWAController;
}
}
这是展现在潜在的泄漏 为[[self alloc] init];
对象的潜在泄漏分配
为什么它的泄漏?
使其:_sharedWAController = [[self alloc] init];
你永远不会把它分配给什么,因此将只分配一个新对象,并泄露了。修理泄漏和不正确的工作代码分配_sharedWAController
if (!_sharedWAController)
_sharedWAController = [[self alloc] init];
+1,但有很多singleton实现在'allocWithZone:'中进行赋值,但静态分析器不知道这一点。 – gcamp
哪里需要发布_sharedWAController? – user891268
通常情况下,单身人士在应用程序的整个生命周期内都会存在,因为你总是有一个对它的引用,所以没有内存泄漏。 – Joe
+ (WAController*) sharedWAController {
@synchronized([WAController class]) {
if (!_sharedWAController)
{
_sharedWAController = [[self alloc] init];
}
return _sharedWAController;
}
}
+ (CommonUtility*) sharedUtility {
@synchronized([CommonUtility class]) {
if (!_sharedUtility)
_sharedUtility = [[self alloc] init];
return _sharedUtility;
}
}
+ (id) alloc {
@synchronized([CommonUtility class]) {
_sharedUtility = [super alloc];
return _sharedUtility;
}
}
我尝试这样是这个完美的。但我分配_sharedUtility对象,我需要释放。这在dealloc或autorelesae中。
虽然我假设你的问题是“为什么会泄漏”,这里没有任何问题! –
Opps我忘记输入抱歉的詹姆斯webster – user891268