问题描述
对一个NSMutableArray进行排序,却造成了内存泄漏……
代码说明:
在多线程的流程中,存在一个NSMutableArray *sortList;
对sortList进行排序,一开始用的方法是这样的,有内存泄漏:
1 | NSArray *sortedSendQuery = [self.sortList sortedArrayUsingFunction:frameDataCompare context:NULL]; |
修正后的代码只有一行,没有内存泄漏:
1 | [self.sortList sortUsingFunction:frameDataCompare context:nil]; |
原因分析
NSArray的排序方法是:sortedArrayUsingFunction
NSMutableArray的排序方法是:sortUsingFunction
self.sortList是一个NSMutableArray,直接使用NSMutableArray的排序方法sortUsingFunction不需要进行内存复制,可以提高性能;
除了性能问题,由于在多线程中使用,而且如果NSMutableArray中的object内存分配来自于其他线程的,那么不必要的内存复制会导致内存泄漏,出现的内存泄漏问题类似于:
Memory leaks from Multidimensional array: NSMutableArray, NSArray, addObject and insertObjectAtIndex
结论
对于NSMutable的使用,要留意调用正确的方法,能不做类型转换就不做