【发布时间】:2012-02-24 03:27:29
【问题描述】:
对于持有弱引用的对象,我有以下简单代码:
// 接口
@interface GMWeakRefObj : NSObject
@property (weak) id object;
@end
// 实现
@implementation GMWeakRefObj
@synthesize object;
@end
当我运行以下测试代码时,第二个断言失败:
NSData* d = [[NSData alloc] init];
GMWeakRefObj* weakRef = [[GMWeakRefObj alloc] init];
weakRef.object = d;
NSAssert(weakRef.object != nil, @"Reference wasn't assigned");
d = nil;
NSAssert(weakRef.object == nil, @"Reference wasn't zeroed"); // <-- FAIL
ARC 弱引用不应该归零吗?如果是这样,我做错了什么?
【问题讨论】:
-
您使用的是什么版本的 iOS/Mac OS?归零弱引用运行时仅适用于 iOS 5/OS 10.7
-
我在 5.0 模拟器上运行它,目标的部署目标是 5.0,所以版本不匹配应该不是问题。此外,我只是使用原始引用(即不是属性)尝试了这个,并且弱引用没有问题地清零 - 所以这个机制确实因为某种原因不适用于我的属性。
标签: objective-c properties automatic-ref-counting weak-references