2012-01-27 19 views
1

我有以下一段代碼。我對保留/釋放概念有些不確定。何處發佈此代碼中的CFStringRef

for (int i = 0; i < ABMultiValueGetCount(urls) ; i++) { 
    CFStringRef url = ABMultiValueCopyValueAtIndex(urls, i); 
    CFStringRef urlType = ABMultiValueCopyLabelAtIndex(urls, i); 
    urlString = (NSString *)url; 
    urlTypeString = (NSString *)urlType; 
    if ([urlTypeString hasPrefix:@"_"]) { 
     NSString * urlTypeSubString = [urlTypeString substringWithRange:NSMakeRange(4, ([urlTypeString length]-8))]; 
     [mutableArray addObject:[NSString stringWithFormat:@"URL; %@: http://%@",urlTypeSubString,urlString]]; 
    }else{ 
     [mutableArray addObject:[NSString stringWithFormat:@"URL; %@: http://%@",urlTypeString,urlString]]; 
    } 
} 

我有2個問題。

  1. 我應該在這段代碼中釋放'CFStringRef url'和'CFStringRef urlType'。

  2. 我應該釋放'urlString'和'urlTypeString',它們是字符串類型。

回答

2

在你的for循環結束

for (int i = 0; i < ABMultiValueGetCount(urls) ; i++) 
{ 
    CFStringRef url = ABMultiValueCopyValueAtIndex(urls, i); 
    CFStringRef urlType = ABMultiValueCopyLabelAtIndex(urls, i); 
    urlString = (NSString *)url; 
    urlTypeString = (NSString *)urlType; 
    if ([urlTypeString hasPrefix:@"_"]) { 
     NSString * urlTypeSubString = [urlTypeString substringWithRange:NSMakeRange(4, ([urlTypeString length]-8))]; 
     [mutableArray addObject:[NSString stringWithFormat:@"URL; %@: http://%@",urlTypeSubString,urlString]]; 
    } 
    else 
    { 
     [mutableArray addObject:[NSString stringWithFormat:@"URL; %@: http://%@",urlTypeString,urlString]]; 
    } 
    // Release here 
    CFRelease(url); 
    CFRelease(urlType); 
}