下面的代码是NON ARC代码,有人可以告诉我如何将其转换为ARC,当我使用它时,它有内存泄漏,编码网址。
#import "NSString+EncodeURIComponent.h"
@implementation NSString (EncodeURIComponent)
+ (NSString*)stringEncodeURIComponent:(NSString *)string {
return [((NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8)) autorelease];
}
@end
提前致谢..
答案 0 :(得分:3)
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(__bridge CFStringRef)string,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]"),
kCFStringEncodingUTF8));
这是以下内容:
autorelease
CFBridgingRelease()
将Core Foundation对象传递给ARC。这平衡了Create
。原则上(虽然不是实现),Core Foundation执行CFRelease()
,ARC执行objc_retain()
。_bridge
时添加string
个案。这告诉编译器您没有在ARC和Core Foundation之间转移所有权。您只希望Core Foundation使用ARC变量。CFSTR()
创建一个恒定的Core Foundation字符串。这比创建常量NSString
更方便,然后将其转换为Core Foundation。请参阅Transitioning to ARC Release Notes中的“管理免费电话桥接”。