0

以下は私のコードです:

    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];

分析を使用すると、次の行が表示されます。

[_takePhoto setImage:takePhotoImg forState:UIControlStateNormal];

割り当てられたオブジェクトの潜在的なリーク。リリースを追加する必要がありましたか、それとも単に無視しましたか?
前もって感謝します

更新:deallocでボタン_takePhotoをリリースしました:

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

私の財産 :

@property(nonatomic,retain)UIButton *takePhoto;
4

2 に答える 2

0

ARCを使用していない場合は、はい、リリースする必要があります。self.viewのサブビューに追加するとself.view、ボタンが消えないように保持されます。

addSubview:ボタンにアクセスする必要がなく、参照を保持する必要がない場合は、呼び出しの直後にボタンを離すことができます。

takePhotoただし、クラスのプロパティのようです。その場合、後で使用するためにボタンへの参照を保持したい場合は、クラスメソッドに[_takePhoto release]呼び出しを追加するだけです。deallocこれにより、コード分析の警告が抑制されます。

于 2012-04-25T02:14:02.367 に答える
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メソッドの[_takePhotorelease]は、setterメソッドで保持するためのものです。self.takePhoto = aNewTakePhoteを呼び出すたびに、aNewTakePhoteが1回保持されます。

于 2012-04-25T03:40:46.817 に答える