NSMutableArray
、NSArray
排序方法引发的内存泄漏
问题简述
在NSArray
中可以调用 sortedArrayUsingFunction
对Array数组进行排序。
但是当NSMutableArray
使用这个排序算法的时候就会造成内存泄漏…
代码说明
在多线程中,存在一个NSMutableArray *sortList;
对sortList
进行排序,一开始用的方法是这样的,有内存泄漏:
NSArray *sortedSendQuery = [self.sortList sortedArrayUsingFunction:frameDataCompare context:NULL];
[self.sortList removeAllObjects];
[self.sortList addObjectsFromArray:sortedSendQuery];
修改后的代码简单,没有内存泄漏
[self.sortList sortUsingFunction:frameDataCompare context:nil];
产生的原因
NSArray
的排序方法是:sortedArrayUsingFunction
NSMutableArray
的排序方法是:sortUsingFunction
self.sortList
是一个NSMutableArray
,直接使用NSMutableArray
的排序方法sortUsingFunction
不需要进行内存复制,可以提高性能;
除了性能问题,由于在多线程中使用,而且如果NSMutableArray
中的object
内存分配来自于其他线程的,那么不必要的内存复制会导致内存泄漏,出现的内存泄漏问题类似于:
https://stackoverflow.com/questions/5200857/memory-leaks-from-multidimensional-array-nsmutablearray-nsarray-addobject-and
结论
对于NSMutable
的使用,要留意调用正确的方法,能不做类型转换就不做