博客
关于我
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/

你可能感兴趣的文章
OpenStack版本升级与故障排查实战
查看>>
Openstack的HA解决方案【替换原有的dashboard】
查看>>
OpenStack的基本概念与架构详解
查看>>
Openstack的视频学习
查看>>
OpenStack自动化安装部署实战(附OpenStack实验环境)
查看>>
openstack虚拟机迁移live-migration中libvirt配置
查看>>
OpenStack项目管理实战
查看>>
OpenStreetMap初探(一)——了解OpenStreetMap
查看>>
openSUSE 13.1 Milestone 2 发布
查看>>
openSUSE推出独立 GUI 包管理工具:YQPkg,简化了整个软件包管理流程
查看>>
OpenVP共用账号 一个账号多台电脑登录
查看>>
OpenVSwtich(OVS)Vlan间路由实战 附实验环境
查看>>
Openwrt LuCI模块练习详细步骤
查看>>
openwrt_git_pull命令提示merger冲突时如何解决?
查看>>
OpenWrt包管理软件opkg的使用(极路由)
查看>>
OpenWrt固件编译刷机完全总结
查看>>
Open××× for Linux搭建之二
查看>>
Open×××有线网络时使用正常,无线网络时使用报错的解决方案
查看>>
Opera Mobile Classic Emulator
查看>>
Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
查看>>