的NSString + encodeURIComponent方法

时间:2012-09-17 13:01:58

标签: iphone objective-c xcode4.3

下面的代码是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

提前致谢..

1 个答案:

答案 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中的“管理免费电话桥接”。