ios - 转换为 ARC 时 NSMakeCollectable 出现问题

标签 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 @"";
}

它给我这个错误:NSMakeCollectable 不可用:在自动引用计数中不可用

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

编辑: 试过这个但没有用:

 - (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 @"";
    }

也试过这个:

- (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 @"";
        }

最佳答案

NSMakeCollectable 在 ARC 中不再需要。您可以在此处使用 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 @"";
}

关于ios - 转换为 ARC 时 NSMakeCollectable 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197678/

相关文章:

ios - 一键多 Action TableView自定义Cell

ios - 当弹出一个 UIWebView Controller 然后回到 UITabBarController 时,tab bar 的高度会改变

ios - 执行网络异步请求的自定义类的内存管理

objective-c - ARC 会为您释放 malloc 的内存吗?

ios - 在iOS中设置动态UI

ios - 尝试调整 subview 时 IBOutlet 不起作用

objective-c - clang 是否使用 __typeof 捕获 ARC 修饰符?

objective-c - 以编程方式检测对象层次结构中的保留周期的策略可能是什么?

ios - 无法在 iOS7 中显示模态 ViewController

objective-c - ARC、桥接 Actor 和 GHUnit