私はAVFoundationを使用してアセットをファイルに書き出すためのライブラリを作成しています。私は読者、作家を作成し、入力と出力をこれらに接続してから、入力のrequestMediaDataWhenReadyOnQueue
メソッドを呼び出してデータを取得し始めます。この方法に供給されたブロックのコールバックは、ビットのようになります。[AVAssetWriterInput requestMediaDataWhenReadyOnQueue:usingBlock:]のメモリの問題
[input requestMediaDataWhenReadyOnQueue:queue usingBlock:^{
while ([input isReadyForMoreMediaData]) {
CMSampleBufferRef buffer;
// The track has some more data for us
if ([reader status] == AVAssetReaderStatusReading
&& (buffer = [output copyNextSampleBuffer])) {
BOOL result = [input appendSampleBuffer:buffer];
CFRelease(buffer);
if (!result) {
// handle error
break;
}
// The track is finished, for whatever reason
} else {
[input markAsFinished]; ⬅
switch ([reader status]) {
// inspect the status and act accordingly
}
}
}
}];
これは、iOS 5に完璧に動作しますが、iOSの4上のコードでは、⬅矢印でマークされた行の後EXC_BAD_ACCESSから死にます。いくつかのポンキングの後、私はブロックが何らかの形で完了したとして入力をマークした直後に破壊されたように感じる。悪い行を実行する前に完全に有効なself
ポインタは、どういうわけか0xfff…
またはデバッガによって報告されたガベージ値に変わります。しかし、ゾンビツールで確認されているように、前に指し示されたオブジェクトは問題ありません。割り当て解除されません。
私には何が欠けていますか?
+1を使用してください! ʘ‿ʘ –
この問題を解決できましたか? – Tonton