调用removeAllObjects后,NSMutableArray无法释放对象

时间:2014-06-09 08:54:10

标签: ios objective-c memory-management memory-leaks

我是开发ios app的新人。

@property (copy, nonatomic) NSMutableArray* dataBufferArray;

以下代码在一个经常调用的回调函数中运行。

[analyzer.dataBufferArray addObject:[NSNumber numberWithInteger:thisFrame]];
[analyzer.dataBufferArray removeAllObjects];

ARC中的代码 我发现记忆总是在增长!最后IOS退出我的应用程序导致大量内存消耗。

我的问题是:为什么removeAllObjects无法释放内存? 如何解决?

发布更多代码

static int analyze(SAMPLE *inputBuffer,
        unsigned long framesPerBuffer,
        AudioSignalAnalyzer *analyzer) {

    SAMPLE *pSample = inputBuffer;

    for (long i = 0; i  SAMPLE_RATE){
        NSArray* unitSampleArray = [analyzer.dataBufferArray subarrayWithRange:NSMakeRange(0, SAMPLE_RATE  - 1)];
        [analyzer.dataBufferArray removeObjectsInRange:NSMakeRange(0, SAMPLE_RATE  - 1)];

        //use thread to process
       NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:analyzer
                                                                               selector:@selector(decodeSound:)
                                                                                 object:unitSampleArray];
        [analyzer.queue addOperation: operation];
    }
        // for protect
    if (analyzer.dataBufferArray.count > SAMPLE_RATE * 12){
        NSLog(@"sample in data buffer so big, need clear");
        [analyzer.dataBufferArray removeAllObjects];

    }
    return 0;
}

如您所见,分析函数是由AudioQueueNewInput回调。 我使用NSMutableArray添加对象NSNumber,而且我总是' removeObjectsInRange:'他们。我用仪器检查内存,它总是在增长!

1 个答案:

答案 0 :(得分:0)

您正在使用基于ARC的项目,无需释放内存,它将自动管理。您的问题在其他地方,请发布更多代码。