Xcode静态分析仪&内存泄漏

时间:2012-06-22 01:20:45

标签: objective-c memory-management

感谢您的光临。

这个静态分析仪警告让我烦恼 这是我的代码

+ (INURLConnection*)createConnectionForRequest:(INHTTPRequest *)aRequest {

    INURLConnection* result = [[INURLConnection alloc] init];
    if(result){
        result.request = aRequest;
        result.error = nil;
    }
    return result;
}

“返回结果”行显示潜在的内存泄漏警告(当我使用分析器时)。这是一个创建方法,消耗的方法看起来像这样

INURLConnection *connection_tmp = [INURLConnection createConnectionForRequest:aRequest];
self.connection = connection_tmp, [connection_tmp release];

因此创建连接返回的保留计数为1, self.connection增加了保留计数,并且还有一个释放。

我知道我可以使用ARC,但我想知道为什么静态分析仪在这里显示潜在的内存泄漏。

忽略此警告是否安全?

欢呼声 阿伦

1 个答案:

答案 0 :(得分:4)

忽略此警告是不安全的,因为您违反了Cocoa内存管理的“规则”之一:“您不拥有通过引用返回的对象”。

将功能的最后一行更改为

return [result autorelease];

并且Xcode警告应该消失。

您应该阅读Apple有关该主题的文档Basic Memory Management Rules,这些文档将更详细地介绍各种约定。坚持这些规则是很好的,因为阅读或使用您的代码的任何人都会期望它的行为方式。