admin 管理员组文章数量: 1086019
potential leak of an object stored into xxx :一个对象存储到xxx的潜在泄漏 。
作为苹果开发菜菜都知道苹果有两种内存管理模式:一种是MRC,开发人员手动管理对象,另一种是ARC,不需要开发人员手动释放管理对象,这一点大大方便开发者,也是我选择oc的缘故,但是!但是!但是!我今天发现了一个问题,并不是所有的内存在ARC的模式下都可以被自动释放,例如ARC并不管理C-type对象,这样的话 我们就得在调用C的一些方法创建的C类型对象要手动释放了,比如 CGImage ------ CGImageRelease,
跟后台交互的时候有个用AFN网络请求连接其中的有效字段需要带入的参数是中文,一开始总失败,后发现是中文编码转译的问题,于是我百度了一个方法:
/* 转译*/
- (NSString *)encodeToPercentEscapeString:(NSString *) input
{
NSString *outputStr = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL, /* allocator */
(__bridge CFStringRef)input, NULL, /* charactersToLeaveUnescaped */
(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
return outputStr;
}
赋值粘贴,在调用 OK!成功!
但是我进行Analyse的时候,这里提示内存泄漏,凡是调用的地方也出现这个错误提示,申请了oc对象outputstr并初始化了,但我并未使用?????原来:
Your bridged cast does not transfer the ownership, thus the retain count is increased. Use __bridge_transfer instead.
你架桥投不转移所有权,因此保留计数增加。使用__bridge_transfer代替。
于是修改一下
/* 转译*/
- (NSString *)encodeToPercentEscapeString:(NSString *) input
{
NSString *outputStr = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)input, NULL, (CFStringRef)@"!*'():;@&+=$,/?%#[].", kCFStringEncodingUTF8);
return outputStr;
}
查阅:http://stackoverflow/questions/20071176/potential-leak-of-an-object-stored-into-string点击打开链接(该人使用与我有些不同,但也是用到了架桥的方法)
本人不才,如有文本语言错误或见解不到位的地方欢迎私信我提出应改正之处。^_^
本文标签: leak potential object xxx stored
版权声明:本文标题:potential leak of an object stored into xxx 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1738258604a1952241.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论