博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS Runtime之四:关联对象
阅读量:4963 次
发布时间:2019-06-12

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

转自  http://www.imlifengfeng.com/blog/?p=397

 

一、概述

如何给NSArray添加一个属性(不能使用继承)?不能用继承,难道用分类?但是分类只能添加方法不能添加属性啊(Category不允许为已有的类添加新的成员变量,实际上允许添加属性的,同样可以使用@property,但是不会生成_变量(带下划线的成员变量),也不会生成添加属性的getter和setter方法,所以,尽管添加了属性,也无法使用点语法调用getter和setter方法。但实际上可以使用runtime去实现Category为已有的类添加新的属性并生成getter和setter方法),这篇博文则告诉你方法。

关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上。

举个例子:xiaoming是Person类的一个实例,他的dog(一个OC对象)通过一根绳子(key)被他牵着散步,这可以说xiaoming和dog是关联起来的,当然xiaoming可以牵着多个dog。

 

二、如何关联对象

runtime提供给我们的方法:

参数说明:

objc_AssociationPolicy policy的enum值有:

当对象被释放时,会根据这个策略来决定是否释放关联的对象,当策略是RETAIN/COPY时,会释放(release)关联的对象,当是ASSIGN,将不会释放。

值得注意的是,我们不需要主动调用removeAssociated来接触关联的对象,如果需要解除指定的对象,可以使用setAssociatedObject置nil来实现。

 

三、应用实例(Category添加属性并生成getter和setter方法)

我们现在来解决峰哥在概述中提出的问题:如何给NSArray添加一个属性(不能使用继承)?

我们现在为NSArray增加一个blog属性:

我们先按照往常方式创建一个NSArray的Category,NSArray+MyCategory.h文件:

NSArray+MyCategory.m文件:

测试代码:

打印结果:

 

原创文章,转载请注明: 转载自

转载于:https://www.cnblogs.com/fromus/p/6829397.html

你可能感兴趣的文章
来简书坚持一个月日更之后
查看>>
程序员如何利用空余时间挣零花钱?
查看>>
美食小记
查看>>
Java笔记——关于线程同步
查看>>
Java 7 中 NIO.2 的使用——第一节 Path 类的使用
查看>>
我一直记不住的vim用法
查看>>
使QScrollArea的背景透明,并且不影响子控件
查看>>
最完美的毁尸灭迹:皮箱连环弃尸案始末
查看>>
tempdb过大事故记录-sqlserver
查看>>
ASP.NET Core远程调试
查看>>
GO项目目录
查看>>
Vue_(基础)Vue中的指令
查看>>
IE8下动态生成option无法设置文本内容
查看>>
欧拉定理
查看>>
Class<T> 与T区别
查看>>
Swift学习笔记
查看>>
新手学fusionCharts做图表
查看>>
[React Native] Use the SafeAreaView Component in React Native for iPhone X Compatibility
查看>>
[React] Optimistic UI update in React using setState()
查看>>
[CSS] Targeting Elements with CSS Attribute Selectors
查看>>