我在我的代碼中使用以下方法:[CFArray release]:發送到解除分配的實例的消息
- (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]: message sent to deallocated instance
我試過在調用retain之前記錄[result retainCount]
並打印「1」。我不明白爲什麼在調用retain時會拋出錯誤。
謝謝,
A
你是對的!問題不在於保留消息,它在賦值self.array = result因爲在以前的某個地方,我使用array = result(不使用self) – arielcamus 2010-03-19 17:15:08