NSMutableArray 、NSArray排序方法引发的内存泄漏

NSMutableArrayNSArray排序方法引发的内存泄漏

问题简述

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的使用,要留意调用正确的方法,能不做类型转换就不做

你可能感兴趣的:(IOS,Cocoa,macOS,开发,NSMutableArray,NSArray,排序,内存泄漏)