2011-06-28 7 views
0

に正しくNSStringのを解析した後、私は次のコードが漏れかどうかを知りたいと思います:Objective-Cの

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; 
} 
関連する問題