2011-06-28 109 views
0

我想知道如果下面的代碼泄漏:在目標C正確地解析的NSString後釋放的NSArray

bool IsWordOf(NSString* myString, NSString* myWord) 
{ 
    NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet]; 
    [separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"]; 

    NSArray *parse_array = [myString componentsSeparatedByCharactersInSet:separators]; 
    parse_array = [parse_array filteredArrayUsingPredicate:noEmptyStrings]; 

    //NSLog(@"%@", parse_array); 

    bool identicalStringFound = NO; 
    for (NSString *someString in parse_array) 
    { 
     if([someString caseInsensitiveCompare:myWord] == NSOrderedSame) 
     { 
      identicalStringFound = YES; 
      break; 
     } 
    } 

    return identicalStringFound;  
} 

必須我釋放該陣列的所有對象([parse_array releaseAllObjects]),然後釋放它([解析數組發佈])?

謝謝。

回答

1

不,你沒有分配它或保留parse_array,所以你不能釋放它。更一般地說,您不負責釋放存儲在數組中的對象或任何其他未明確擁有所有權的對象(通過+ alloc,-retain,-copy,+ new ...) 。如果數組保留了對象,則數組負責正確釋放它們。

0

您的代碼不會泄漏。

此外,您的代碼可以壓縮。我覺得奇怪的是,您使用NSPredicate來過濾數組的一部分,然後再次循環查找其他內容。爲什麼不只是使用謂詞來做到這一點?

BOOL IsWordOf(NSString* myString, NSString* myWord) 
{ 
    NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet]; 
    [separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    NSArray *parse_array = [myString componentsSeparatedByCharactersInSet:separators]; 

    NSPredicate *search = [NSPredicate predicateWithFormat:@"SELF.length > 0 AND SELF ==[cd] %@", myWord]; 
    NSArray *filtered = [parse_array filteredArrayUsingPredicate:search]; 
    return [filtered count] > 0; 
}