gpt4 book ai didi

objective-c - EXC_BAD_ACCESS 从 NSTimer 调用函数

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:08 24 4
gpt4 key购买 nike

我不得不说,我对 objective-c/Cocoa 还很陌生。目前我正在尝试使用 NSTimer 定期更新一些数据。

@interface MyAppController : NSObject  
{
NSTimer * monitorTimer;
DemoObject *myObj;
}
...

和以下实现:

...
- (id) init
{
self = [super init];

if (self) {
myObj = [[DemoObject alloc] init];

monitorTimer = [NSTimer timerWithTimeInterval:2
target:self
selector:@selector(monitorTimerFired:)
userInfo:NULL
repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:monitorTimer forMode:NSDefaultRunLoopMode];
}

return self;
}

...

- (void) monitorTimerFired: (id)sender
{
BOOL status = [myObj isRunning];
}

同步调用 monitorTimerFired,例如,从 init 函数工作正常。如果它由定时器调用,它总是导致 EXC_BAD_ACCESS。显然这是内存管理的问题,但我找不到合适的解决方案。任何想法,评论,解决方案?谢谢:)

最佳答案

如果您要将 NSTimer 存储在实例变量 monitorTimer 中,您应该保留并适本地使其无效、释放和 nil(如果不在 dealloc 中)完成后。

monitorTimer = [[NSTimer timerWithTimeInterval:2
target:self
selector:@selector(monitorTimerFired:)
userInfo:NULL
repeats:YES] retain];

至于 EXC_BAD_ACCESS,您的 MyAppController 可能会在计时器触发时被释放。

关于objective-c - EXC_BAD_ACCESS 从 NSTimer 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7339104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com