我正在編寫一個庫,使用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