0

我用 AVCaptureVideoDataOutput 和 AVCaptureStillImageOutput 设置了一个超级基本的 AVCaptureSession。AVCaptureVideoDataOutput 没有缓冲区委托。没有什么花哨的,只是设置了一个标准问题 AVCaptureSession。如果我只是编译应用程序并让它在那里放置大约 10 分钟,可用内存每分钟左右下降 1mb 左右。我已经以 72mb 的免费空间启动了该应用程序,将其放在我的办公桌上后,我发现可用内存低至 33mb。

如果我注释掉将 AVCaptureVideoDataOutput 添加到会话的部分,可用内存将保持在 70-72mb 左右。

所以我设置了一个按钮来从会话中删除 AVCaptureVideoDataOutput,点击按钮后,可用内存立即跳回到应用程序首次运行时(~72mb)。有没有其他人看到这个并知道解决方法?我的 iPhone 上有 iOS 5.0 和最新的 beta SDK。

编辑:这是添加 AVCAPtureVideoDataOutput 的代码:


...

NSNumber *rgbNum = [NSNumber numberWithInt:kCVPixelFormatType_32BGRA];
NSDictionary *videoSettings = [NSDictionary dictionaryWithObject:rgbNum forKey:(id)kCVPixelBufferPixelFormatTypeKey];

dataOutput = [AVCaptureVideoDataOutput new];
[dataOutput setAlwaysDiscardsLateVideoFrames:YES];
[dataOutput setVideoSettings:videoSettings];
_videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", NULL);
[dataOutput setSampleBufferDelegate:self queue:_videoDataOutputQueue];
dispatch_release(_videoDataOutputQueue);

if ([session canAddOutput:dataOutput]) {
  [session addOutput:dataOutput];
} else {
  NSLog(@"couldn't add av data output");
}
...

注释掉缓冲区委托似乎没有什么不同。

再试一次,它在 6 分钟内从 ~70mb 免费变为 ~54mb。:(

4

2 回答 2

1

显然没有解决方法 - 向Apple提交了一个错误。

编辑: 这个问题有点老了,但如果它对任何人都有帮助:我不是 100% 肯定的,但我认为我看到这个的原因是因为我打开了僵尸对象!确保您没有在 Xcode 中启用僵尸对象,看看是否有帮助!转到“编辑方案...”,然后选择“诊断”选项卡。

于 2012-01-23T09:38:51.917 回答
1

在这种情况下,我不确定您是否应该非常关心当前的可用内存。iOS 可能会自行决定缓存某些内容或保留内存用于某些目的。

要检查内存泄漏 - 最好使用带有泄漏跟踪器的分析器,但不仅仅是当前可用的内存。

此外,最好检查已发布的 iOS SDK 上的行为 - 测试版可能存在一些问题,因为它是测试版......

于 2012-01-08T07:40:47.587 回答