Ios 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

我收到一个错误的访问异常

例外情况:EXC\u错误访问(代码=1,地址=0x0))

取消分配PinCache实例时。 当我使用ARC时,不应该到达dispatch_release(_queue),但是它到达了,并且崩溃了。有没有关于为什么会发生这种情况的建议

这是PINCache代码

- (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方法上崩溃。 现在,它已在以下问题下修复