gpt4 book ai didi

objective-c - 将 objc_setAssociatedObject 与弱引用一起使用

转载 作者:太空狗 更新时间:2023-10-30 03:14:06 25 4
gpt4 key购买 nike

我知道 OBJC_ASSOCIATION_ASSIGN 存在,但如果目标对象被释放,它会将引用清零吗?或者它是否像过去那样需要将引用置为零,否则我们以后可能会面临访问错误的风险?

最佳答案

正如 ultramiraculous 所展示的,OBJC_ASSOCIATION_ASSIGN 不会对弱引用进行清零,因此您有访问已释放对象的风险。但是自己实现起来很容易。您只需要一个简单的类来包装具有弱引用的对象:

@interface WeakObjectContainer : NSObject
@property (nonatomic, readonly, weak) id object;
@end

@implementation WeakObjectContainer
- (instancetype) initWithObject:(id)object
{
if (!(self = [super init]))
return nil;

_object = object;

return self;
}
@end

然后您必须将 WeakObjectContainer 关联为 OBJC_ASSOCIATION_RETAIN(_NONATOMIC):

objc_setAssociatedObject(self, &MyKey, [[WeakObjectContainer alloc] initWithObject:object], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

并使用 object 属性访问它以获得归零弱引用:

id object = [objc_getAssociatedObject(self, &MyKey) object];

关于objective-c - 将 objc_setAssociatedObject 与弱引用一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com