关联传值
2016-03-08 17:24
211 查看
[Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects
关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。
关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。
■ 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
■ 关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。
关联
关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。
在类的定义之外为类增加额外的存储空间
使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。
创建关联
创建关联要使用到Objective-C的运行时函数:objc_setAssociatedObject来把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略。当然,此处的关键字和关联策略是需要进一步讨论的。■ 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
■ 关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。
相关文章推荐
- APACHE如何里一个站点绑定多个域名?用ServerAlias servername
- 好用的圆圈 “加载加载” 效果 (也有dialog里面的加载)
- 网站自动跳转中英文页面的方法
- android studio 打包混淆jar
- 浅浅浅谈web缓存之浏览器缓存
- MySql 5.1x InnoDB "ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法
- 正则表达式总结-精简版
- 系统升级导致cocoapod不能用
- JAVA大数类详细介绍与题目应用举例
- 多线程图解
- rsync+inotify实现文件夹实时同步
- CF 345 div2 A和B
- 文件锁 flock及fcntl flock
- kinetis时钟模块MCG详解
- 虚拟手机的创建步骤
- MySQL-常见数据拆分办法
- 转载:C#中的多态
- 重写NSLog,Debug模式下打印日志和当前行数
- Apache服务器中.htaccess文件的实用配置示例集锦
- 每次输出日志前需要判断日志的级别吗?