iphone - CMSampleBufferRef 内存泄漏

标签 iphone ios memory-management memory-leaks

所以我在转换一些音频时遇到了问题。我在转换时遇到了巨大的内存泄漏,它来自这些代码行。

dispatch_queue_t mediaInputQueue = dispatch_queue_create("mediaInputQueue", NULL);
[assetWriterInput requestMediaDataWhenReadyOnQueue:mediaInputQueue 
                                        usingBlock: ^ 
 {

     while (assetWriterInput.readyForMoreMediaData) 
     {
         CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];
         if (nextBuffer) 
         {

             [assetWriterInput appendSampleBuffer: nextBuffer];
              nextBuffer = NULL;              

         } 
         else 
         {
             // done!
             [assetWriterInput markAsFinished];
             [assetWriter finishWriting];
             [assetReader cancelReading];
             NSDictionary *outputFileAttributes = [[NSFileManager defaultManager]
                                                   attributesOfItemAtPath:exportPath
                                                   error:nil];





             NSNumber *doneFileSize = [NSNumber numberWithLong:[outputFileAttributes fileSize]];
             [self performSelectorOnMainThread:@selector(updateCompletedSizeLabel:)
                                    withObject:doneFileSize
                                 waitUntilDone:NO];

             // release a lot of stuff
             [assetReader release];
             [assetReaderOutput release];
             [assetWriter release];
             [assetWriterInput release];
             [exportPath release];
             break;
         }
     }

 }];

似乎导致泄漏的行是: CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];

我迷失在这个问题上,我们将不胜感激。

回答: 固定 - 只需在 if/else 语句的末尾添加这些行。

CMSampleBufferInvalidate(nextBuffer);
         CFRelease(nextBuffer);
         nextBuffer = nil; // NULL?

最佳答案

答案:已修复 - 只需在 if/else 语句的末尾添加这些行。

CMSampleBufferInvalidate(nextBuffer);
CFRelease(nextBuffer);
nextBuffer = NULL;

关于iphone - CMSampleBufferRef 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355175/

相关文章:

iphone - 如何使用自己的委托(delegate)方法添加 subview ?

iphone - UILocalNotifications 播放自定义声音

ios - 核心数据关系

java - OutOfMemoryError - 我可以将数据转储到文件而不是内存中吗?

C++ operator new、对象版本和分配大小

ios - <错误> : CGBitmapContextCreateImage: invalid context 0x0

ios - session 正在记录,但事件未记录在 Flurry for iPhone 应用程序中

ios - 迁移到Unified API后,Xamarin Mobile MediaPickerController错误

ios - 如何自动调整 mkmapview 的大小以在方向更改时填满整个屏幕?

c++ - 一些基本操作的 CPU 成本数量级