2012-10-23 34 views
-1

我刚刚发现了XCode的Build> Analyze功能,所以我正在尝试着解决它所发现的所有错误。有几行XCode中发现的异常与被困惑我:XCode - 使用Build> Analyze,潜在的泄漏警告

//Test View 
    self.imageViewTest = [[UIImageView alloc] init]; 
    self.imageViewTest.frame = CGRectMake(0, 0, 100, 100); // <=== Leak 
    [self.view addSubview:self.imageViewTest]; 
    //Test View 2 
    self.imageViewTestB = [[UIImageView alloc] init]; 
    self.imageViewTestB.frame = CGRectMake(0, 100, 100, 100); // <=== Leak 
    [self.view addSubview:self.imageViewTestB]; 
在我的视频拍摄设置

后来

self.captureOutput = [[AVCaptureVideoDataOutput alloc] init]; 
    captureOutput.alwaysDiscardsLateVideoFrames = YES; // <=== Leak 

在这些线路的警告“对象的潜在泄漏”。在我的dealloc方法中,所有这3个对象都发送release消息。这里有什么可能是错的?

谢谢!

+0

这些属性是如何声明的(保留,分配,复制等)? –

+0

他们都被宣布为保留。 –

回答

4

如果您不使用ARC并且您的属性使用retain属性进行设置,那么是的,这些都是泄漏。这条线:

self.imageViewTest = [[UIImageView alloc] init]; 

应该是:

UIImageView *iv = [[UIImageView alloc] init]; 
self.imageViewTest = iv; 
[iv release]; 

或:

self.imageViewTest = [[[UIImageView alloc] init] autorelease]; 

或者更好的是,使用ARC。它让事情变得更容易。

+0

哦,好的。在去年ARC推出之前,这个项目一直很顺利,我一直在试图将它转换为ARC来吓倒。过渡到使用ARC非常重要? –

+0

取决于代码。我今年夏天用400多个非平凡的.m文件转换了一个项目。我花了大约两个小时才转换。大多数项目会更容易。 – rmaddy

+0

这并不坏。有没有一个精心制作的教程可以帮助我节省一些头痛? –