【问题标题】:NSMutableArray can not release objects after invoke removeAllObjectsNSMutableArray 在调用 removeAllObjects 后无法释放对象
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 嗨,我添加了代码,请帮忙检查。如果您需要更多信息,请联系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多