分配对象的潜在泄漏

时间:2011-09-08 13:46:32

标签: objective-c

+ (WAController*) sharedWAController {

    @synchronized([WAController class]) {

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

        return _sharedWAController;
    }
}

这显示潜在的泄漏 [[self alloc] init];

为什么泄漏?

4 个答案:

答案 0 :(得分:3)

你永远不会将它分配给任何东西,所以它只会分配一个新对象并泄漏它。要修复泄漏和错误工作的代码,请指定_sharedWAController

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

答案 1 :(得分:1)

制作:_sharedWAController = [[self alloc] init];

答案 2 :(得分:0)

+ (WAController*) sharedWAController {

    @synchronized([WAController class]) {

        if (!_sharedWAController)
        { 
            _sharedWAController = [[self alloc] init];
        }
        return _sharedWAController;
    }
}

答案 3 :(得分: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中。