奇妙な問題があります。私は現在メールアプリに取り組んでおり、以前はコンソールにエラーやログが表示されずにランダムにクラッシュしていました。クラッシュログを確認したところ、メモリ不足の警告が表示され、アプリの横に投棄が書かれていました。
したがって、メモリの問題であると思われ、アプリケーションのメモリ使用量を追跡するために戻ってきました。全体的な使用量を検出するために割り当て手段を使用したところ、ヒープ サイズがわずか 4.59 MB のときにアプリケーションがクラッシュしました。
楽器は、MBProgressHUD インジケーターを使用している関数を指しています。犯人はこの1行です:
[appDelegate showHUDActivityIndicatorOnView:self.parentViewController.view whileExecuting:@selector(refreshInBackground) onTarget:self withObject:nil withText:@"Loading"];
これを
[self refreshInBackground]
すべてに置き換えると、問題なく動作します..
コードは次のとおりです。
-(void) showHUDActivityIndicatorOnView:(UIView*)view whileExecuting:(SEL)method
onTarget:(id)target withObject:(id)object withText:(NSString*)label{
self.HUD = [[MBProgressHUD alloc] initWithView:view] ;
self.navigationController.navigationItem.hidesBackButton = YES;
[view addSubview:self.HUD];
self.HUD.delegate = nil;
self.HUD.labelText = label;
[self.HUD showWhileExecuting:method onTarget:target withObject:object animated:YES];
}
self.HUD
保有している物件です。
わずかな変更を加えたshowWhileExecuting
方法は次のとおりです。
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
MyAppdelegate *appDelegate = (MyAppdelegate *)[UIApplication sharedApplication].delegate;
if(!appDelegate.isRequestActive)
{
methodForExecution = method;
targetForExecution = [target retain];
objectForExecution = [object retain];
// Launch execution in new thread
taskInProgress = YES;
[NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];
// Show HUD view
[self show:animated];
}
else {
[self done];
}
}
現在、アプリからこれを削除しましたが、現在は正常に動作し、20 ~ 30 MB のヒープ メモリを使用してもクラッシュしません。
ここで特定の回答や解決策を探しているわけではありません。アプリがクラッシュした原因を知ることができるように、問題をデバッグする方法/テクニックを探しています。
メモリオーバーフローですか。その場合、現在 20 ~ 30 MB を使用するにはどうすればよいでしょうか。メモリの問題ではない場合、クラッシュ レポーターが App name の横に破棄されていると表示されるのはなぜですか。
犯人ライン([appDelegate showHUDActivityIndicatorOnView:self.parentViewController.view whileExecuting:@selector(refreshInBackground) onTarget:self withObject:nil withText:@"Loading"])
この関数を呼び出すたびに、一部の要素がキャッシュされるため、メモリが増加します。しかし、メモリが 4.5 MB に達すると ...この行が原因でクラッシュします
この問題の根本原因を突き止めるにはどうすればよいですか。iOS がアプリを強制終了する理由を把握するにはどうすればよいですか? アプリの横に書かれている投棄の理由
ヘルプや提案をいただければ幸いです。