我有一个为 ARC 和 iOS 5 设计的库,但一位客户想要为 iOS 4.x 构建。weak
我将带有限定符的属性转换为unsafe_unretained
,但是现在看来我遇到了内存损坏-esq 崩溃。在崩溃的情况下,我有一个像这样的委托属性
@property (unsafe_unretained) id<MYDelegateProtocol> delegate;
我@synthesize
是伊瓦尔。
每当我想在委托上调用方法时,我检查它是否是nil
,如果不是,那么我调用该方法,因为我在该协议中没有可选方法,所以我不检查respondsToSelector
.
但是,自从更改weak
to 后unsafe_unretained
,我发现引用显然消失了,我留下了一个悬空指针。如果我在 ObjC 异常上放置断点(对于无法识别的消息),然后po
是对象的地址,我会看到它是一个甚至没有实现委托协议的对象,所以它当然会崩溃。
使用时unsafe_unretained
如何知道引用已“消失”?我的代码依赖于之前被清零的指针。