我有一个返回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
并且我在调用块中释放它,所以我知道警告可以被忽略,但我想完全删除它们。
我是否错过了一个让分析仪满意的命名约定? 可以在协议中定义函数吗? 子类化将如何运作?
答案 0 :(得分:5)
- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key
可以找到关于该主题的详细说明here
或者,您可以选择使用属性cf_returns_retained
,但最好(imo)支持命名约定。