潜在泄漏(使用垃圾收集时)

时间:2011-10-12 21:00:27

标签: macos cocoa garbage-collection

我正在使用自动垃圾收集在我的Cocoa应用程序上运行Analyze并收到以下错误消息:

Potential leak (when using garbage collection) of an object allocated on line 1243

这就是第1243行:

self.positiveValueColor = CGColorCreateGenericRGB(0.0, 0.0, 1.0, 1.0);

以下是self.positiveValueColor属性的定义:

@property (assign) CGColorRef positiveValueColor

分析器稍后会在下面的方法中报告错误。 “double largestValue = 0.0”是出现错误的地方,即使它引用了第1243行:

以下是整个参考方法:

- (void) setDefaultColors {
    if (self.positiveValueColor == nil) {
        self.positiveValueColor = CGColorCreateGenericRGB(0.0, 0.0, 1.0, 1.0);
    }

    if (self.negativeValueColor == nil) {
        self.negativeValueColor = CGColorCreateGenericRGB(1.0, 0.0, 0.0, 1.0);
    }

    if (self.zeroValueColor == nil) {
        self.zeroValueColor = CGColorGetConstantColor(kCGColorBlack);
    }

}

- (BOOL) largestValueIsPositive {
    double largestValue = 0.0;

    if (self.pv != nil) {
        double value = [self.pv doubleValue];
        if (fabs(value) > fabs(largestValue)) {
            largestValue = value;
        }
    } 
    ... // method continues on

为什么我得到分析错误?

- 编辑 -

谢谢,查克!那很有效。以下是我用以下内容替换相关行:

self.positiveValueColor = (CGColorRef)CFMakeCollectable(CGColorCreateGenericRGB(0.0, 0.0, 1.0, 1.0));

1 个答案:

答案 0 :(得分:2)

CGColorRefs通常不符合垃圾回收的条件。你应该使用CFMakeCollectable()。这就是它的警告。