AVCaptureVideoDataOutputとAVCaptureStillImageOutputを使用して設定された非常に基本的なAVCaptureSessionがあります。AVCaptureVideoDataOutputにはバッファーデリゲートがありません。標準的な問題のAVCaptureSessionを設定するだけで、特別なことは何も起こっていません。アプリをコンパイルして約10分間そのままにしておくと、使用可能なメモリは1分ごとに1MB程度減少します。私は72MBの空き容量でアプリを起動しましたが、机の上に置いただけで、空きメモリが33MBまで低下するのを確認しました。
AVCaptureVideoDataOutputをセッションに追加した部分をコメントアウトすると、使用可能なメモリは約70〜72MBのままになります。
そこで、セッションからAVCaptureVideoDataOutputを削除するボタンを設定しました。ボタンをタップすると、使用可能なメモリがすぐにアプリの最初の実行時(〜72mb)に戻ります。他の誰かがこれを見て、回避策を知っていますか?iPhoneにiOS5.0があり、最新のベータ版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の空き容量になりました。:(