2011-09-08 164 views
0
+ (WAController*) sharedWAController { 

    @synchronized([WAController class]) { 

     if (!_sharedWAController) 
      [[self alloc] init]; 

     return _sharedWAController; 
    } 
} 

这是展现在潜在的泄漏 为[[self alloc] init];对象的潜在泄漏分配

为什么它的泄漏?

+0

虽然我假设你的问题是“为什么会泄漏”,这里没有任何问题! –

+0

Opps我忘记输入抱歉的詹姆斯webster – user891268

回答

1

使其:_sharedWAController = [[self alloc] init];

3

你永远不会把它分配给什么,因此将只分配一个新对象,并泄露了。修理泄漏和不正确的工作代码分配_sharedWAController

if (!_sharedWAController) 
    _sharedWAController = [[self alloc] init]; 
+1

+1,但有很多singleton实现在'allocWithZone:'中进行赋值,但静态分析器不知道这一点。 – gcamp

+0

哪里需要发布_sharedWAController? – user891268

+0

通常情况下,单身人士在应用程序的整个生命周期内都会存在,因为你总是有一个对它的引用,所以没有内存泄漏。 – Joe

0
+ (WAController*) sharedWAController { 

    @synchronized([WAController class]) { 

     if (!_sharedWAController) 
     { 
      _sharedWAController = [[self alloc] init]; 
     } 
     return _sharedWAController; 
    } 
} 
0
+ (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中。