非常快速的问题让我开始了INSANE。我想知道是否有人能告诉我为什么这条线路正在泄漏?
NSString *post = [NSString stringWithFormat:@"<someXML><tagWithVar=%@></tagWithVar></someXML>",var];
post = [NSString stringWithFormat:@"xmlValue=%@",(NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)post,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 )];
我只是将字符串编码为URL格式。根据我的理解,stringWithFormat:应该返回一个自动释放的对象。显然事实并非如此。它有效,但泄漏。任何想法??
答案 0 :(得分:15)
您正在使用方法CFURLCreateStringByAddingPercentEscapes
。如果Core Foundation函数的名称中包含“Create”,则表示您拥有返回的对象。换句话说,您需要释放CFStringRef
返回的CFURLCreateStringByAddingPercentEscapes
。
NSString *post = [NSString stringWithFormat:@"...", var];
CFStringRef stringRef = CFURLCreateStringByAddingPercentEscapes(...);
post = [NSString stringWithFormat:@"xmlValue=%@",(NSString *)stringRef];
CFRelease(stringRef);