【发布时间】:2014-07-29 18:52:15
【问题描述】:
我是开发 ios 应用程序的新手。
@property (copy, nonatomic) NSMutableArray* dataBufferArray;
以下代码在回调函数中运行。该函数被频繁调用。
[analyzer.dataBufferArray addObject:[NSNumber numberWithInteger:thisFrame]]; [analyzer.dataBufferArray removeAllObjects];
在 ARC 中运行的代码。
我发现记忆总是在增长!最后,由于内存消耗过大,IOS 退出了我的应用程序。
我的问题是:为什么removeAllObjects 不能释放内存? 如何解决?
发布更多代码
静态 int 分析(样本 *inputBuffer, unsigned long framesPerBuffer, 音频信号分析器 *分析器){ 样品 *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)]; //使用线程处理 NSInvocationOperation *操作 = [[NSInvocationOperation alloc]initWithTarget:analyzer 选择器:@选择器(解码声音:) 对象:unitSampleArray]; [analyzer.queue addOperation: 操作]; } // 用于保护 if (analyzer.dataBufferArray.count > SAMPLE_RATE * 12){ NSLog(@"数据缓冲区中的样本太大,需要清除"); [analyzer.dataBufferArray removeAllObjects]; } 返回0; }如您所见,analyze 函数是由 AudioQueueNewInput 回调的。 我使用 NSMutableArray 添加对象 NSNumber,并且我总是 'removeObjectsInRange:' 他们。我用仪器检查内存,它一直在增长!
【问题讨论】:
-
你的问题出在其他地方。
-
这段代码看起来不错,问题出在其他地方。分享更多细节你想做什么。
-
我测试改代码:[analyzer.dataBufferArray addObject:[NSNumber numberWithInteger:thisFrame]];到 [analyzer.dataBufferArray addObject:@"test"];内存没有增长......从 NSMutableArray 中删除后,'NSNumber' 对象是否需要手动释放?
-
您是否使用带有泄漏工具的工具运行您的代码?大概在将数字添加到数组和将其从数组中删除之间,您执行了一些其他处理?并且大概当您添加@“test”时,您必须绕过其他处理,因为数组不包含数字?这个其他代码似乎包含问题
-
是的,我使用仪器工具知道内存泄漏。
标签: ios objective-c memory-management memory-leaks