我该如何避免这种记忆警告?

时间:2011-08-25 15:35:28

标签: objective-c memory-management naming-conventions

我有一个返回CGPath并生成分析器警告的方法。该方法在协议中声明。以下是生成警告的示例实现:

  

“在第47行分配并存储在'path'中的对象的潜在泄漏”:

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key;
{
    if ([key isEqualToString:OvalColumn])
    {
        CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);
        return path;
    }

    return NULL;
}

以下是生成警告的示例用法,“调用者此时不拥有的对象的引用计数的不正确减少”

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey];

// Use the path to do some drawing

CGRelease(path);

我的记忆管理是正确的;我从协议方法中传回一个保留的CGPath并且我在调用块中释放它,所以我知道警告可以被忽略,但我想完全删除它们。

我是否错过了一个让分析仪满意的命名约定? 可以在协议中定义函数吗? 子类化将如何运作?

1 个答案:

答案 0 :(得分:5)

- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key

可以找到关于该主题的详细说明here

或者,您可以选择使用属性cf_returns_retained,但最好(imo)支持命名约定。