单身潜在泄漏?

时间:2013-02-03 19:40:51

标签: ios xcode singleton memory-leaks analyzer

在我的项目中的一个第三方库中,单例sharedInstance方法似乎在最终的return_sharedInstance行中抛出了一个分析器警告:

+ (BlockBackground*)sharedInstance
{
    if (_sharedInstance != nil) {
        return _sharedInstance;
    }

    @synchronized(self) {
        if (_sharedInstance == nil) {
            [[[self alloc] init] autorelease];
        }
    }

    return _sharedInstance;
}

无论如何,实际修复此警告的正确方法是什么?另外我已经看到你不应该在这样的方法中做自我分配,这是真的吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

实际上你的行[[[self alloc] init] autorelease];在对象上创建并立即扔掉它。您需要替换为_sharedInstance = [[self alloc] init];

答案 1 :(得分:2)

这是autorelease;你需要删除它,但更重要的是(感谢@ Yaman / @ rmaddy)你没有将分配的对象分配给_sharedInstance

下一次运行循环结束时,或下次自动释放池被销毁时,以较早者为准,实例将被释放。 _sharedInstance指针将保留悬空,对象的下一个用户将发送消息发送到解除分配的实例(或某些此类)。

相关问题