potential leak of an object stored into xxx

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.com/questions/20071176/potential-leak-of-an-object-stored-into-string点击打开链接(该人使用与我有些不同,但也是用到了架桥的方法)

 

本人不才,如有文本语言错误或见解不到位的地方欢迎私信我提出应改正之处。^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值