0

iPhone アプリを作成していて、XCode に Analyze ツールがあることに気付きました。

私はこのコードを持っています:

View * view = [[View alloc]initWithFrame:self.view.frame title:currentItem.name id:currentItem.idStr];
self.menuView = [[MenuView alloc]init];
self.menuView.contentView = view;
[view release];

およびViewプロパティ:

@property (retain,nonatomic) MenuView * menuView;

そして、プロジェクトで分析を行うと、この潜在的なリーク警告が表示されます。そして、それが大丈夫かどうかを知りたいのですが、分析は私に警告するだけですか? または、コードを間違えました。


編集

そして、私がこのようなことをすると:

@property (retain, nonatomic) IBOutlet UISlider *progressSlider;

.

self.progressSlider = [[[UISlider alloc]initWithFrame:CGRectMake(58, 12, 191, 23)]autorealese];
[view addSubview:self.progressSlider];

そしてdeallocで:

[progressSlider realese];

これは私もやるべきことですか?それとも間違っていますか?

4

2 に答える 2

7

self.menuViewプロパティが として指定されているため、リークしていretainます。allocオブジェクトを呼び出すと、その保持カウントは 1 に設定されます。プロパティが割り当てられると、2 に増加し、それを均一化するための呼び出しのバランスをとることはありません。

最も簡単な修正は、次のように を呼び出すこと-autoreleaseです。

self.menuView = [[[MenuView alloc] init] autorelease];

あなたの編集では、はい、そのコードは表面上は正しいようです。私の本当の質問は、なぜまだ手動参照カウントを使用しているのかということです。はい - 表面的には理解するのは良いことですが、アップルは新しい ARC を支持してそれを非難しています。

于 2013-01-17T13:51:58.517 に答える
3

プロパティを保持する場合は、dealloc メソッドでリリース メッセージを送信する必要があります。

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

また、menuView プロパティを割り当てるときに割り当て/初期化します。init メソッドは、保持カウントを 1 にします。プロパティを設定すると、保持カウントが 2 になります。一致する数のリリースが必要です。セットアップ コードは次のようになります。

MenuView *m = [[MenuView alloc] init];
self.menuView = m;
[m release];
于 2013-01-17T13:50:59.430 に答える