【发布时间】: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