2011-05-27 37 views
1

喂,我在iOS开发的新手,我已经endountered一些问题AVAssetWriter东西泄漏

我喜欢的对象AVAssetWriter的一些设置(我用它来写pixelmaps 作为帧视频 - 和它的作品确定)

self.assetWriter = [[AVAssetWriter alloc] initWithURL:outputPath fileType:AVFileTypeQuickTimeMovie error:&error]; 

    NSMutableDictionary *dic=[[NSMutableDictionary alloc] init]; 
    [dic setValue: AVVideoCodecH264 forKey: AVVideoCodecKey]; 
    [dic setValue:[NSNumber numberWithInt:640] forKey:AVVideoWidthKey]; 
    [dic setValue:[NSNumber numberWithInt:480] forKey:AVVideoHeightKey]; 
    self.assetWriterInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:dic]; 
     [dic release]; 

    assetWriterInputPixelBufferAdaptor =[[AVAssetWriterInputPixelBufferAdaptor alloc] initWithAssetWriterInput:assetWriterInput sourcePixelBufferAttributes:nil]; 

    self.assetWriterInput.expectsMediaDataInRealTime=YES; 
    [self.assetWriter addInput:assetWriterInput]; 

    [self.assetWriter startWriting]; 
    [self.assetWriter startSessionAtSourceTime:recordStartTime]; 

那么之后我保存的视频,然后后,我释放实例

[self.assetWriterInput markAsFinished]; 
[self.assetWriter endSessionAtSourceTime:recordStartTime]; 
[self.assetWriter finishWriting]; 

CVPixelBufferPoolRelease(assetWriterInputPixelBufferAdaptor.pixelBufferPool); 
[self.assetWriter release]; 
[self.assetWriterInput release]; 
[self.assetWriterInputPixelBufferAdaptor release]; 

麻烦的是,仪器告诉我,当泄漏我使用上面的对几次来创建和发布实例来保存一些视频

帮助!

+0

仪器中的泄漏痕迹是否表明泄漏与您的代码有关?你有没有对你的代码进行静态分析? – 2011-05-29 05:44:49

回答

0
AVAssetWriter *newWriter = [AVAssetWriter alloc] // retain count is 1. 
self.assetWriter = newWriter // What this actually does: 

- (void)setAssetWriter(AVAssetWriter*)newWriter 
{ 
    if (_assetWriter != newWriter) 
    { 
     [_assetWriter release] 
     _assetWriter = [newWriter retain]; //retain count 2 
    } 
} 

[self.assetWriter release]; //retain count 1 

如果您忘记添加self.assetWriter = nil; dealloc,你最终会泄漏。当[Alloc] ating实例并通过@properties分配它们时,附加autorelease以分配这样的行:

self.assetWriter = [[[AVAssetWriter alloc] initWithURL:outputPath fileType:AVFileTypeQuickTimeMovie error:&error] autorelease]; 
+0

这些只是一个赋值属性'@property(assign)AVAssetWriter * assetWriter; @property(assign)AVAssetWriterInput * assetWriterInput; @property(assign)AVAssetWriterInputPixelBufferAdaptor * assetWriterInputPixelBufferAdaptor;'所以我认为这是关闭的问题(?) – fiery 2011-05-28 05:16:59