Eth*_*len 1 xcode objective-c ios automatic-ref-counting
警告是:
存储在'escaped_value'中的对象的潜在泄漏
这是代码:
- (NSURL*)generateURL:(NSString*)baseURL params:(NSDictionary*)params {
if (params) {
NSMutableArray* pairs = [NSMutableArray array];
for (NSString* key in params.keyEnumerator) {
NSString* value = params[key];
NSString* escaped_value = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL, /* allocator */
(__bridge CFStringRef)value,
NULL, /* charactersToLeaveUnescaped */
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@=%@", key, escaped_value]];
}
NSString* query = [pairs componentsJoinedByString:@"&"];
NSString* url = [NSString stringWithFormat:@"%@?%@", baseURL, query];
return [NSURL URLWithString:url];
} else {
return [NSURL URLWithString:baseURL];
}
}
Run Code Online (Sandbox Code Playgroud)
当您调用CFURLCreateStringByAddingPercentEscapes并且从不CFReleasing它时,您正在创建一个字符串.在对象超出范围之前CFRelease对象或将__bridge更改为__bridge_transfer以让ARC处理它.
__bridge_transfer告诉ARC,在演员阵容期间,对象的+1保留计数被转移到ARCs的责任范围内.ARC将根据其规则发布实例.
__bridge告诉ARC,在演员阵容期间没有转移保留计数.
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |