0

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の空き容量になりました。:(

4

2 に答える 2

1

この場合、現在使用可能なメモリについてそれほど気にする必要があるかどうかはわかりません。iOSは、独自の決定に基づいて何かをキャッシュしたり、特定の目的のためにメモリを予約したりする場合があります。

メモリリークをチェックするには-現在使用可能なメモリだけでなく、リークトラッカーとともにプロファイラーを使用することをお勧めします。

また、リリースされたiOS SDKの動作を確認することをお勧めします-ベータ版であるため、ベータ版にはいくつかの問題がある可能性があります...

于 2012-01-08T07:40:47.587 に答える
1

どうやらこれに対する回避策はありません-Appleにバグを提出しました。

編集: この質問は少し古いですが、誰かに役立つ場合に備えて:私は100%ポジティブではありませんが、これを見た理由は、ゾンビオブジェクトがオンになっているためだと思います!Xcodeでゾンビオブジェクトが有効になっていないことを確認し、それが役立つかどうかを確認してください。[スキームの編集...]に移動し、[診断]タブを選択します。

于 2012-01-23T09:38:51.917 に答える