【问题标题】:Why does Clang complain about all my autoreleased objects?为什么 Clang 抱怨我所有的自动释放对象?
【发布时间】:2010-10-25 02:38:36
【问题描述】:

我有以下功能:

- (NSString *)urlEncodedValue {
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                   kCFAllocatorDefault, 
                   (CFStringRef)self, 
                   NULL, 
                   CFSTR("?=&+/\r\n"), 
                   kCFStringEncodingUTF8
);

return [result autorelease];

}

为什么 Clang 会给我以下投诉?

  • 1 调用函数“CFURLCreateStringByAddingPercentEscapes”返回一个核心基础对象,其保留计数为 +1(拥有引用)
  • 2 对象发送 -autorelease 消息
  • 3 对象作为拥有引用返回给调用者(单个保留计数转移给调用者)
  • 4 对象过度自动释放:对象已发送 -autorelease 但对象的保留计数为零(本地可见)

据我所知,这符合 Apple 关于内存管理和对象所有权的准则。我必须明确释放对象吗?这个错误在我的项目中出现了 19 次,都是在类似的情况下。我做错了什么?

【问题讨论】:

  • 好问题...我遇到了同样的问题,我也不明白出了什么问题。也许这是clang中的一个错误......
  • 可能是这样,但我发现这很难相信,因为自动释放的对象并不完全模糊。当我使用 +alloc 和 -init 嵌套自动释放时也会发生这种情况。

标签: objective-c memory-leaks clang


【解决方案1】:

我已经找到了我自己问题的答案,如果其他人偶然发现了这个问题,请在此处发布。我正在使用 checker-0.198,checker-0.204 报告没有这样的问题。似乎是暂时的倒退。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2012-05-15
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多