我跟隨this answer跟蹤我的應用程序EXC_BAD_ACCESS。是的,我有一個殭屍對象。當我試圖找出我的代碼的哪一行是錯誤的,我發現所有負責任的圖書館都是基金會。一個Objective-C消息被髮送到一個釋放的'NSThread'對象(殭屍),地址爲:
當我試圖做到這一點:
當您在任何保留/釋放雙擊,儀器會告訴你這個地方進行的代碼行。
它總是帶我到彙編語言的一些代碼。
[
我不知道如何跟蹤我的錯誤是這樣的...
根據Elike的答案更新。
當我更新按鈕的標題時,錯誤發生了。我使用計時器來每秒更新一個按鈕標題。你可以點擊按鈕來啓動/停止它。我使用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