Освобождение NSArray после правильного анализа NSString в target-c - PullRequest
1 голос
/ 28 июня 2011

Я хотел бы знать, если утечка следующего кода:

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]), а затем освободить его ([parse array release])?

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Нет, вы не выделяли его или не сохраняли parse_array, поэтому не должны его освобождать.

В целом вы не несете ответственности за освобождение объектов, хранящихся в массиве, или любых других объектов,вы явно не стали владельцем (через + alloc, -retain, -copy, + new ...).Если массив сохранил объекты, массив отвечает за их правильное освобождение.

0 голосов
/ 28 июня 2011

Ваш код не течет.

Кроме того, ваш код может быть сжат. Мне кажется странным, что вы используете 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;   
}
...