转换为ARC时NSMakeCollectable出现问题

lak*_*esh 5 ios automatic-ref-counting

我试图将我的代码转换为ARC,我在ASIRequest库中遇到NSMakeCollectable问题.

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

它给了我这个错误:NSMakeCollectable is unavailable: not available in automatic reference counting.

我该如何解决这个问题?需要一些指导.谢谢.

编辑:试过这个而不是工作:

 - (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 @"";
    }
Run Code Online (Sandbox Code Playgroud)

试过这个:

- (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 @"";
        }
Run Code Online (Sandbox Code Playgroud)

iDe*_*Dev 13

NSMakeCollectableARC中不再需要.你可以CFBridgingRelease在这里使用.

- (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 @"";
}
Run Code Online (Sandbox Code Playgroud)