に割り当て解除された 'NSThread'オブジェクト(ゾンビ)にObjective-Cメッセージが送信されましたEXC_BAD_ACCESSのためにthis answerに従っています。はい、私はゾンビオブジェクトを持っています。私のコードのどの行が間違っているかを調べようとしているとき、責任ある図書館のすべてが財団であることがわかりました。私はこれをやろうとしているアドレス:
:
はあなたが任意の保持/解放をダブルクリックし、楽器はあなたにこれが実行されたコードの行が表示されます。
アセンブリ言語では、常にいくつかのコードが必要になります。
[
私はこのような私のバグを追跡する方法がわからない... Elikeの答えに応じて
を更新。
ボタンのタイトルを更新するとバグが発生しました。私はタイマーを使用して1秒あたりのボタンのタイトルを更新します。ボタンをタップして開始/停止することができます。そして私はdispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_auto_duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{});
を使ってメソッドを300回自動実行します(このバグは300回の間にランダムに発生します)。
私はこの _startcounttimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(StartCountTimerMethod) userInfo:nil repeats:YES];
- (void)StartCountTimerMethod
{
_startcountbtnsec++;
NSString *secstring = [NSString stringWithFormat:@"%d", _startcountbtnsec];
[_startbtn setTitle:secstring forState:UIControlStateNormal];
}
のようにタイマーを呼び出すボタンをタップするには、このメソッドを呼び出します:
- (void)StartBtnClick:(UIButton *)btn
{
switch (btn.tag) {
case 0:
btn.tag = 1;
[_startbtn setTitle:@"0" forState:UIControlStateNormal];
_startcountbtnsec = 0;
[self StartCountTimerStart];
NSLog(@"Start!");
break;
case 1:
btn.tag = 0;
[_startbtn setTitle:@"Start" forState:UIControlStateNormal];
[self StartCountTimerStop];
NSLog(@"Stop!");
break;
default:
break;
}
}
私はボタンのテキストを更新するに問題を見ることができません...そしてゾンビオブジェクトは "NSThread"です。バグがボタンとスレッドについてある可能性はありますか?
難しいです。クラッシュ自体は診断的なものであることに留意してください。実際の間違いはずっと前に起こった。だから、はい、メッセージがゾンビに送られた時点では、あなたのコードではありません。しかし、あなたのコードは、以前の状況を設定します。あなたは後方に努力する必要があります。 – matt
まあ、私も同様の状況にあったし、確かに、基礎図書館に問題はないと言える。静的アナライザを実行してみてくださいhttps://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/static_analyzer.html(これは問題を解決しません、最初のステップになります)潜在的なメモリを確認してくださいリーク –
私は静的アナライザーを実行しましたが、潜在的なメモリリークはありません。 – Chien