【发布时间】:2013-04-17 05:07:34
【问题描述】:
您好,我在尝试获取全局变量或设置值时遇到问题。
它在应用程序生命周期的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
}
};
}
}
});
但有时会产生错误,有时不会。有什么想法吗?
【问题讨论】:
-
将
__unsafe_unretained替换为__weak。当引用的对象被释放时,弱变量将自动设置为nil。 -
另外,你为什么在不可变的
NSNumber对象上调用copy? -
我使用了 __weak 但这不起作用,我删除了 NSNumber 的副本但它不起作用,:(
标签: ios objective-c objective-c-blocks