【发布时间】:2010-02-26 09:27:56
【问题描述】:
我在使用下面的代码时遇到了一些问题:
NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key ascending:ascending] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray *result = [NSMutableArray arrayWithArray:orderArray];
如果我使用这段代码,Instruments 说我有内存泄漏,为什么?
使用此代码:
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,您必须向它发送一条释放消息,否则它会泄漏。阅读这篇文章,看看它是否能解决一些困惑 (cocoadev.com/index.pl?AutoRelease)
-
正如我所说,如果我发送发布消息,我会收到 EXC_BAD_ACCESS。我在一个辅助函数中使用此代码,该函数在任何地方都被调用以使用特定键对数组进行排序。
-
所以,如果我使用这个函数: - (NSMutableArray *) orderArray:(NSMutableArray *)array ByKey:(NSString *)key ascending:(BOOL)ascending { NSSortDescriptor *idDescriptor = [[[NSSortDescriptor alloc] initWithKey:key 升序:ascending] autorelease]; NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor]; NSArray *orderArray = [数组 sortedArrayUsingDescriptors:sortDescriptors]; NSMutableArray *result = [[[NSMutableArray alloc] initWithArray:orderArray] autorelease];返回结果;当在任何其他代码中收到对象时,我是否必须保留它?
标签: iphone objective-c memory arrays memory-leaks