我有一个返回 CGPath
并生成分析器警告的方法。该方法在协议(protocol)中声明。这是生成警告的示例实现:
"Potential leak of an object allocated on line 47 and stored into '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);
我的内存管理是正确的;我从我的协议(protocol)方法传回一个保留的 CGPath
并在调用 block 中释放它,所以我知道可以忽略警告,但我想将它们完全删除。
我是否缺少让分析器满意的命名约定? 功能可以在协议(protocol)中定义吗? 子类化将如何工作?
最佳答案
- (CGPathRef)newPathForBounds:(CGRect)bounds 键:(NSString *)key
可以找到有关该主题的详细说明 here
或者,您可以选择使用属性 cf_returns_retained
,但最好 (imo) 支持命名约定。
关于objective-c - 我应该如何避免这种内存警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193167/