Ios PINCache的执行就像在非圆弧项目上一样
我收到一个错误的访问异常 例外情况:EXC\u错误访问(代码=1,地址=0x0)) 取消分配PinCache实例时。 当我使用ARC时,不应该到达dispatch_release(_queue),但是它到达了,并且崩溃了。有没有关于为什么会发生这种情况的建议 这是PINCache代码Ios PINCache的执行就像在非圆弧项目上一样,ios,objective-c,automatic-ref-counting,Ios,Objective C,Automatic Ref Counting,我收到一个错误的访问异常 例外情况:EXC\u错误访问(代码=1,地址=0x0)) 取消分配PinCache实例时。 当我使用ARC时,不应该到达dispatch_release(_queue),但是它到达了,并且崩溃了。有没有关于为什么会发生这种情况的建议 这是PINCache代码 - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; #if !OS_OBJECT_USE_O
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
#if !OS_OBJECT_USE_OBJC
dispatch_release(_queue);
dispatch_release(_lockSemaphore);
_queue = nil;
#endif
}
听起来你真正想要的是:
#if !__has_feature(objc_arc)
...
#endif
或者如果你真的想对此产生偏执:
#if defined(__has_feature)
#if __has_feature(objc_arc)
...
#endif
OS\u OBJECT\u USE\u OBJC
可以说是一种正交结构/选项
编写在ARC运行时和非ARC运行时工作相同的健壮代码是一件棘手的事情;您确定需要这样做吗?这是PINCache项目的一个问题。 应用程序在PINMemoryCache或PINDiskCache中的dealloc方法上崩溃。 现在,它已在以下问题下修复