【发布时间】:2011-01-29 13:22:44
【问题描述】:
我在我的代码中使用了以下方法:
- (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]: 消息发送到释放的实例
我尝试在调用retain 之前记录[result retainCount] 并打印“1”。我不明白为什么调用retain时会抛出错误。
谢谢,
一个
【问题讨论】:
标签: iphone objective-c cocoa memory-management dealloc