Issue with NSMakeCollectable when converting to ARC

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I am trying to convert my code to ARC and I have problem with NSMakeCollectable in the ASIRequest library.

- (NSString*)encodeURL:(NSString *)string {     NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]);     if (newString) {         return newString;     }     return @""; } 

It is giving me this error: NSMakeCollectable is unavailable: not available in automatic reference counting.

How do I solve this? Need some guidance. Thanks.

EDIT: Tried this and not working:

 - (NSString*)encodeURL:(NSString *)string     {         NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]);         if (newString) {             return (__bridge_transfer NSString*)newString;         }         return @"";     } 

Tried this as well:

- (NSString*)encodeURL:(NSString *)string         {             NSString *newString = NSMakeCollectable([(__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]);             if (newString) {                 return newString;             }             return @"";         } 

回答1:

NSMakeCollectable is no longer required in ARC. You can use CFBridgingRelease here.

- (NSString*)encodeURL:(NSString *)string {     NSString *newString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])));     // or  NSString *newString = (__bridge_transfer NSString*)(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding]));     if (newString) {         return newString;     }     return @""; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!