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点击打开链接(该人使用与我有些不同,但也是用到了架桥的方法)
本人不才,如有文本语言错误或见解不到位的地方欢迎私信我提出应改正之处。^_^
作为苹果开发菜菜都知道苹果有两种内存管理模式:一种是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点击打开链接(该人使用与我有些不同,但也是用到了架桥的方法)
本人不才,如有文本语言错误或见解不到位的地方欢迎私信我提出应改正之处。^_^
相关文章推荐
- Object-c------多态
- 如何给List<Map<String, Object>> list 增加值和修改值
- Object-c------继承
- [乐意黎原创]php 抛Fatal error: Cannot use object of type stdClass as array in XXX的解决方法
- Xcode插件管理工具CocoaPods安装教程
- Objective-C中字符串NSString的常用操作方法总结
- [Angular 2] Using a Reducer to Change an Object's Property Inside an Array
- different object with the same identifier value was already associated with the session 问题解决
- Objective-C中的block代码块的使用
- 2.Samba安装问题:error while loading shared libraries: libXXX.so.X: cannot open shared object file
- Object-c------self
- ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper的解决办法
- Object-c-----类方法
- 泛型与Object
- Foundation => Objective-C _ Part6
- jenkins部署war 报错required: java.lang.Long found: java.lang.Object
- 【Realflow】Objects - Volume节点翻译
- 开发工具、Object类(java基础知识十一)
- Foundation => Objective-C _ Part5
- 【Android数据传递】Intent传递List和Object和List<Object>(附源码)