2

Xcode 4.3.2 を使用して、ARC を有効にした iPhone アプリを開発しています。プロジェクトをナビゲートしている間、クラッシュはありませんが、リークツールを使用してプロジェクトの実行を見たときに、mallocリークが何度も表示されています。解決する方法がわかりません...

プロジェクトで次のコーディングを使用しました..テーマは、データのロード中に別のビューでビューを非表示にすることです.....

[NSThread detachNewThreadSelector: @selector(StartActivityIndicator) toTarget:self withObject:nil];



-(void)StartActivityIndicator
{ 
    hideView= [[UIView alloc] initWithFrame: CGRectMake(0,0,320,480)];
    activityIndicator= [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(148,188, 24, 24)];
    hideView.backgroundColor =[UIColor blackColor];
    hideView.alpha=0.8;
    [hideView addSubview:activityIndicator];
    [self.view addSubview:hideView];
    [activityIndicator startAnimating];  

}

これまたはこのコーディングの代替にエラーはありますか..

そして、ARCが有効になっている場合、リークに対処する必要があります.....

4

2 に答える 2

1

アニメーション化されたアクティビティインジケーターを表示するためにスレッドを使用する必要はありません。それ以外の

[NSThread detachNewThreadSelector: @selector(StartActivityIndicator) toTarget:self withObject:nil];

単に使用する

[self StartActivityIndicator];

スレッドを使用すると、たとえば、メインスレッドの外部でUI関連のクラスやメソッドにアクセスしたり、非アトミックとして宣言されたセッターを使用したり、自動リリースプールの追加を忘れたりするなどして、問題が発生しやすくなります。必要がない限り、そこに行かないでください。また、必要に応じて、独自のスレッドを作成する代わりに、グランドセントラルディスパッチを使用してください。:)

于 2012-06-25T12:30:15.207 に答える
1

ARC を使用しているため、コードを次の場所に配置する必要があります。

**@autoreleasepool {

}**

-(void)StartActivityIndicator { 
@autoreleasepool {
    hideView= [[UIView alloc] initWithFrame: CGRectMake(0,0,320,480)]; 
    activityIndicator= [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(148,188, 24, 24)]; 
    hideView.backgroundColor =[UIColor blackColor]; hideView.alpha=0.8;
    [hideView addSubview:activityIndicator]; 
    [self.view addSubview:hideView];
    [activityIndicator startAnimating];
   }
}
于 2012-05-08T05:35:05.927 に答える