IOS5.1アプリケーションでCorePlot-Cocoa Touchを利用しています。散布図、dataForPlots、凡例などの設定には時間がかかるため、UIActivityIndicatorViewをインクルードしてユーザに何かが起きていることを示します。UIActivityIndicatorViewとCorePlot-CocoaTouchを使用するとメモリプリフェクトが発生します
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
progressInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
progressInd.center = self.view.center;
[progressInd sizeToFit];
progressInd.hidden = NO;
progressInd.alpha = 1.0;
[self.view addSubview:progressInd];
[progressInd startAnimating];
[self.view bringSubviewToFront:progressInd];
[self performSelectorInBackground:@selector(DoMakeupPlot) withObject:nil];
}
- (void)DoMakeupPlot
{
… set up plot
… including datasource and delegate
[progressInd stopAnimating];
[progressInd removeFromSuperview];
progressInd = nil;
}
今これは機会に動作しているようですが、しかし、それは、プロットデータソースルーチンを呼び出す2つのスレッドがなることは明白です:
- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)プロット
- (のNSNumber *)numberForPlot:(CPTPlot *)プロットフィールド:(NSUInteger)fieldEnum recordIndex:機会に行います(NSUInteger)インデックス
メモリの問題を引き起こし、アプリケーションがクラッシュします。
上記の2つのルーチンから2つのスレッドを抜け出そうとしましたが、これは他の問題を引き起こします。
このUIActivityIndicatorViewを使用する前に、上記の2つのルーチンがMainThreadから呼び出され、すべてが良好です。
また、MBProgressHudでこれを試しましたが、明らかに同じ問題があります。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
HUD.detailsLabelText = @"plot data";
HUD.square = YES;
[HUD showWhileExecuting:@selector(DoMakeupPlot) onTarget:self withObject:nil animated:YES];
}
MainThreadがUIActivityIndicatorViewをしながら、それは設定を行っている後どのように私は、数値演算を実行スレッドを削除するには?
ヘルプありがとうございます。
ありがとうございました。これは、アクティビティインジケータが終了した後にデータソースと代理人を設定する次のステップになります。 – swainwri