博客
关于我
association weak 属性
阅读量:585 次
发布时间:2019-03-11

本文共 1104 字,大约阅读时间需要 3 分钟。

类似于将属性设置成weak引用,我们可以通过自定义容器类和关联策略来实现这种弱引用行为。以下是详细的步骤说明和优化后的内容:

首先,我们创建一个自定义容器类WeakAssociationObjectContainer,它需要拥有一个弱引用对象。声明如下:

@interface WeakAssociationObjectContainer : NSObject@property (nonatomic, readonly, weak) id weakObject;- (instancetype)initWeakObject:(id)object;@end

接下来,实现这个容器类:

@implementation WeakAssociationObjectContainer- (instancetype)initWeakObject:(id)object {    self = [super init];    if (self) {        _weakObject = object;    }    return self;}@end

然后,再在拥有这个属性的类中添加以下方法:

@implementation NSObject (WeakAssociate)- (void)setWeakProperty:(id)weakProperty {    WeakAssociationObjectContainer *container = [[WeakAssociationObjectContainer alloc] initWeakObject:weakProperty];    objc_setAssociatedObject(self, @selector(weakProperty), container, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}- (id)weakProperty {    WeakAssociationObjectContainer *container = objc_getAssociatedObject(self, _cmd);    return container.weakObject;}@end

这种方法通过关联策略OBJC_ASSOCIATION_RETAIN_NONATOMIC来实现,其可行性最终取决于真实对象的归 Eagles情况。这种手动管理方式提供了类似weak属性的行为,但需要特别注意对象生命周期和内存管理问题。通过这种方式,可以在不支持weak属性的iostream中实现对属性对象的弱引用。

转载地址:http://wlttz.baihongyu.com/

你可能感兴趣的文章
OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
查看>>
Sql 随机更新一条数据返回更新数据的ID编号
查看>>
OSG学习:空间变换节点和开关节点示例
查看>>
OSG学习:纹理映射(一)——多重纹理映射
查看>>
OSG学习:纹理映射(七)——聚光灯
查看>>
OSG学习:纹理映射(三)——立方图纹理映射
查看>>
OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
查看>>
OSG学习:纹理映射(五)——计算纹理坐标
查看>>
OSG学习:纹理映射(六)——灯光
查看>>
OSPF 四种设备角色:IR、ABR、BR、ASBR
查看>>
OSPF不能发现其他区域路由时,该怎么办?
查看>>
OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
查看>>
SQL Server 存储过程
查看>>
OSPF在大型网络中的应用:高效路由与可扩展性
查看>>
OSPF技术连载18:OSPF网络类型:非广播、广播、点对多点、点对多点非广播、点对点
查看>>
OSPF技术连载19:深入解析OSPF特殊区域
查看>>
SQL Server 复制 订阅与发布
查看>>
OSPF技术连载20:OSPF 十大LSA类型,太详细了!
查看>>
OSPF技术连载21:OSPF虚链路,现代网络逻辑连接的利器!
查看>>
OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
查看>>