2013-03-04 33 views
5

我想我的代碼轉換爲ARC和我在ASIRequest庫有問題,NSMakeCollectable。問題與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 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 @""; 
    } 

嘗試這樣還有:

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

檢查這個http://stackoverflow.com/questions/8594721/nsmakecollectable-and-arc-doesnt-work – tkanzakic 2013-03-04 08:52:54

+0

試了..沒有工作... – lakesh 2013-03-04 08:53:40

+0

不工作...我編輯我的問題。 。 – lakesh 2013-03-04 08:57:38

回答

13

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