我在我的代码中使用以下方法:
- (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 release]: 发送到释放实例的消息
我试图[result retainCount]
在调用保留之前记录并打印“1”。我不明白为什么调用保留时会引发错误。
谢谢,
一个