admin管理员组

文章数量:1530518

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点击打开链接(该人使用与我有些不同,但也是用到了架桥的方法)

 

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

本文标签: leakpotentialobjectxxxstored