0
我有一些麻煩與下面的代碼上:iPhone內存泄漏和釋放的問題排序數組
NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray *result = [NSMutableArray arrayWithArray:orderArray];
如果我用這個代碼,儀器說我有內存泄漏,爲什麼呢?
使用此代碼:
NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray *result = [[NSMutableArray alloc] initWithArray:orderArray];
我收到了泄漏警告過,但是,如果我自動釋放對象的結果,一個內存錯誤發生。
你的第二個代碼塊是分配一個NSMutableArray,你必須發送一個釋放消息或泄漏。閱讀本文,看看它是否清除了一些混淆(http://www.cocoadev.com/index.pl?AutoRelease) – conorgriffin 2010-02-26 09:46:15
正如我所說,如果我發送釋放消息,我收到一個EXC_BAD_ACCESS。我在一個附件函數中使用這個代碼,它被稱爲無處不在,用一個特定的鍵來排列一個數組。 – arielcamus 2010-02-26 09:48:23
所以,如果我使用此功能: - (NSMutableArray的*)orderArray:(NSMutableArray的*)陣列ByKey:(的NSString *)鍵升序:(BOOL)升序{ \t NSSortDescriptor * idDescriptor = [[[NSSortDescriptor的alloc] initWithKey :按鍵升序:升序] autorelease]; \t NSArray * sortDescriptors = [NSArray arrayWithObject:idDescriptor]; \t NSArray * orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];我們可以看到NSMutableArray * result = [[[NSMutableArray alloc] initWithArray:orderArray] autorelease]; \t \t返回結果; } 當我在其他任何代碼段收到對象時,是否保留該對象? – arielcamus 2010-02-26 09:58:15