Я использую следующий метод в моем коде:
- (NSMutableArray *) newOrderedArray:(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];
[idDescriptor release];
NSMutableArray *result = [NSMutableArray arrayWithArray:orderArray];
return result;
}
Это хорошо закодированный удобный метод? Как я думаю, он возвращает автоматически выпущенный NSMutableArray.
Этот метод вызывается другим:
- (id) otherMethod {
NSMutableArray *otherResult = [[[NSMutableArray alloc] initWithCapacity:[otherArray count]] autorelease];
// I add some stuff to otherResult and then...
NSMutableArray *result = [dbUtils newOrderedArray:otherResult ByKey:@"objectId" ascending:NO];
return result;
}
Этот метод (otherMethod) вызывается в каком-либо контроллере представления, где я хочу сохранить возвращенный массив и освободить его при освобождении контроллера представления. Однако когда в этом контроллере представления вызывается [result retain] (потому что мне нужно, чтобы он был доступен, и я не могу разрешить его освобождение), я получаю следующую ошибку:
[выпуск CFArray]: сообщение отправлено освобожденному экземпляру
Я пытался войти [result retainCount]
непосредственно перед вызовом retain, и он вывел «1». Я не понимаю, почему возникает ошибка при вызове retain.
Спасибо,
A