Проблема с утечкой памяти iPhone и выпуском в отсортированном массиве - PullRequest
0 голосов
/ 26 февраля 2010

У меня проблемы с кодом ниже:

NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];  
NSMutableArray *result = [NSMutableArray arrayWithArray:orderArray];

Если я использую этот код, Instruments говорит, что у меня утечка памяти, почему?

Используя этот код:

NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];

NSMutableArray *result = [[NSMutableArray alloc] initWithArray:orderArray];

Я также получаю предупреждение об утечке, однако, если я автоматически освобождаю результат объекта, происходит ошибка памяти.

1 Ответ

2 голосов
/ 26 февраля 2010

Вот лучший ответ, я думаю.

- (NSMutableArray *) orderArray:(NSMutableArray *)array ByKey:(NSString *)key ascending:(BOOL)ascending 
{ 
    NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending]];
    NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor]; 
    NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors]; 
    NSMutableArray *result = [[[NSMutableArray alloc] initWithArray:orderArray]];

    [release idDescriptor]; 
    return [result autorelease]; 
}

Итак, вы выделяете idDescriptor, затем используете его и, наконец, отпускаете. Так как вы возвращаете result, вы можете автоматически выпустить его с возвратом. У меня есть еще один вопрос. Вы ссылаетесь на result в другом месте своего кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...