繁体   English   中英

已将Objective-C消息发送到地址为以下地址的已释放“ NSThread”对象(僵尸):

[英]An Objective-C message was sent to a deallocated 'NSThread' object (zombie) at address:

我遵循此答案来跟踪我的应用程序EXC_BAD_ACCESS 是的,我有一个僵尸物体。 当我试图找出我的代码哪一行错误时,我发现所有负责任的图书馆都是基金会。

像这样

当我尝试执行此操作时:

当您双击任何保留/释放时,仪器将向您显示执行此操作的代码行。

它总是带我一些汇编语言代码。

[ 汇编语言(也许吗?)[3]

我不知道该如何追踪我的错误...

根据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”。该错误是否有可能与按钮和线程有关?

我发现有时仅在方案的诊断中启用僵尸有时会更容易: 在XCode上打破EXC_BAD_ACCESS?

看您的第一个屏幕截图,僵尸很明显,但是我同意实际输出过于通用。 我不知道您的应用程序是关于什么的,但我会在您更新按钮文字(基于通知?)的地方寻找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM