嗨,我有一个问题,当我试图获得一个全局变量或设置值的值。代码是在应用程序生命周期的applicationDidEnterBackground
方法中,当我需要实时了解调用状态时,这对我有用但有时这会生成EXC_BAD_ACCESS
这是变量声明@property(nonatomic, copy) NSNumber *calling;
,这是在我的。h文件。
这是我的。m实现文件的代码:
__unsafe_unretained typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@autoreleasepool
{
while (weakSelf.calling.intValue == 1)
{
callCenter.callEventHandler = ^(CTCall* call)
{
if([call.callState isEqualToString:CTCallStateDisconnected])
{
weakSelf.calling = [[NSNumber numberWithInt:0] copy];//Error EXC_BAD_ACCESS
}
};
}
}
});
但有时会产生错误,而有时则不会。任何想法?
停止使用此weakSelf
。这是不必要的。self
不保留这个块。没有保留循环
当你说__weak
"不工作"时,这表明self
在块运行时已经被释放了,所以弱引用已经设置为nil
,因此给它的消息不做任何事情。这也是__unsafe_unretained
崩溃的原因——self
已经被释放了;如果没有__weak
设置为nil
,则为悬空指针