我用 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。:(