首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMSampleBufferRef内存泄漏

CMSampleBufferRef内存泄漏
EN

Stack Overflow用户
提问于 2012-02-20 09:37:51
回答 1查看 4.9K关注 0票数 9

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

代码语言:javascript
运行
复制
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语句的末尾添加以下行即可。

代码语言:javascript
运行
复制
CMSampleBufferInvalidate(nextBuffer);
         CFRelease(nextBuffer);
         nextBuffer = nil; // NULL?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-22 10:30:39

答:修复-只需在if/else语句的末尾添加以下行即可。

代码语言:javascript
运行
复制
CMSampleBufferInvalidate(nextBuffer);
CFRelease(nextBuffer);
nextBuffer = NULL;
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9355175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档