您的位置:首页 > 移动开发 > Objective-C

potential leak of an object stored into xxx

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

本人不才,如有文本语言错误或见解不到位的地方欢迎私信我提出应改正之处。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: