当我尝试获取全局变量或设置值的值时,我遇到了问题。
它在应用程序生命周期的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
}
};
}
}
});
但有时候会产生错误而其他时候却没有。有什么想法吗?
答案 0 :(得分:4)
停止使用此weakSelf
。没有必要。 self
不会保留此块。没有保留周期。
如果您说__weak
“不起作用”,则表示self
已在块运行时释放,因此弱引用已设置为{{1因此,它的消息什么都不做。这也是nil
崩溃 - __unsafe_unretained
已被解除分配的原因;如果没有self
将其设置为__weak
,则它是一个悬空指针。