通过分析检测到潜在泄漏

时间:2012-04-25 02:09:34

标签: ios memory-leaks

以下是我的代码:

    UIImage *takePhotoImg = [UIImage imageNamed:@"add_pic.png"];
    self.takePhoto = [[UIButton alloc] initWithFrame:CGRectMake(120, 100, takePhotoImg.size.width, takePhotoImg.size.height)];
    [_takePhoto setImage:takePhotoImg forState:UIControlStateNormal];
    [_takePhoto addTarget:self action:@selector(takePhotoBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_takePhoto];

当我使用analyze时,它会显示以下行:

[_takePhoto setImage:takePhotoImg forState:UIControlStateNormal];

分配对象的潜在泄漏。 我需要添加版本,还是只是忽略? 提前谢谢你

更新: 我确实在我的dealloc中发布了按钮_takePhoto:

-(void)dealloc
{
    [_takePhoto release];
    [super dealloc];
}

我的财产:

@property(nonatomic,retain)UIButton *takePhoto;

2 个答案:

答案 0 :(得分:0)

如果你没有使用ARC,那么是的,你需要释放它。当您将其添加到self.view的子视图时,self.view会将其保留,以便按钮不会消失。

如果您不需要访问该按钮而不需要保留引用,则可以在addSubview:电话后立即将其释放。

但是,takePhoto似乎是您班级的属性。如果是这种情况,并且您希望保留对该按钮的引用以供日后使用,只需将[_takePhoto release]调用添加到您的类dealloc方法即可。这应该压制代码分析警告。

答案 1 :(得分:0)

更改代码:

    self.takePhoto = [[UIButton alloc] initWithFrame:CGRectMake(120, 100,      takePhotoImg.size.width, takePhotoImg.size.height)];

    self.takePhoto = [[[UIButton alloc] initWithFrame:CGRectMake(120, 100, takePhotoImg.size.width, takePhotoImg.size.height)] autorelease];
delloc方法中的

[_ takePhoto release]用于setter方法中的retain。每次调用self.takePhoto = aNewTakePhote时,aNewTakePhote都会保留一次。