コードで次のメソッドを使用しています。
- (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)は、返された配列を格納し、ViewControllerの割り当てを解除するときに解放したいViewControllerで呼び出されます。ただし、このビューコントローラで[結果の保持]が呼び出されると(使用可能にする必要があり、割り当てを解除できないため)、次のエラーが発生します。
[CFArrayリリース]:割り当て解除されたインスタンスに送信されたメッセージ
[result retainCount]
保持を呼び出す直前にログに記録しようとしましたが、「1」と出力されます。保持を呼び出すときにエラーがスローされる理由がわかりません。
ありがとうございました、
A