在调用removeAllObjects之后,NSMutableArray不能释放对象

我是一个开发ios应用的新人。

@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:'它们。 我用仪器检查记忆,它一直在增长!


您正在使用基于ARC的项目,不需要释放内存,它会自动管理。 你的问题是其他地方,请张贴更多的代码。

链接地址: http://www.djcxy.com/p/45763.html

上一篇: NSMutableArray can not release objects after invoke removeAllObjects

下一篇: C code from Swift