Iphone XCode分析器给出错误的“;“潜在内存泄漏”;问题
我编写了如下函数来创建CGPath:Iphone XCode分析器给出错误的“;“潜在内存泄漏”;问题,iphone,xcode,memory-leaks,Iphone,Xcode,Memory Leaks,我编写了如下函数来创建CGPath: +(CGPathRef)CGPathCreateRoundrect:(CGRect)rect radius:(CGFloat)radius { CGMutablePathRef path = CGPathCreateMutable(); ...... CGPathCloseSubpath(path); return path; } 分析器说第一行代码创建了一个可能泄漏的对象。但是我确实想在这个函数中创建一个新对象,并将所有权
+(CGPathRef)CGPathCreateRoundrect:(CGRect)rect radius:(CGFloat)radius {
CGMutablePathRef path = CGPathCreateMutable();
......
CGPathCloseSubpath(path);
return path;
}
分析器说第一行代码创建了一个可能泄漏的对象。但是我确实想在这个函数中创建一个新对象,并将所有权转移给调用方。函数名包含关键字“Create”。这是“Analyzer”的错误吗?发生这种情况是因为根据编译器的理解,
+()
方法将始终返回自动释放的变量,这与您的情况不同。Analyzer在这里工作正常。所有权仅通过名为copy
、init
或其某些变体的方法进行转移
返回的对象应该自动删除。这是编译器的一条规则,即使您是在调用方方法中发布它(编译器不知道!!)@user1095341不,我不相信这是正确的。当涉及到Clang静态分析器遵守的命名约定时,类方法(
+
)与实例方法(-
)没有任何区别。正如Williham指出的,分析器正在调用一个没有前缀“alloc”、“new”、“copy”或“mutableCopy”的方法,正如这里的指南所述:。作为一个类方法和一个实例方法在这里没有关系。也不要忘记new
前缀。@BradLarson:为什么不呢?其他人都这样做了