Posts Tagged mac os x

Objective-C – 关联引用

你可以使用关联引用模拟在已存在的类上添加对象参数,这个功能只在Mac OS X v10.6和以上版本支持

在类外添加存储

使用关联引用,你可以对一个对象添加数据而不需要修改这个类定义,这在你没有这个类的源代码时很有用,或者是为了二进制兼容的原因你无法修改这个对象的时候。

关联基于一个key,所以你可以在一个对象上添加多个关联,每个使用不同的key,关联对象也可以确保被关联的对象是否存在,至少在源对象的生命周期内(也就是说这个对象没有将被引入到垃圾回收系统的可能性)

创建关联

你可以使用方法 objc_setAssociatedObject 创建一个关联,这个方法有四个参数,源对象,key,值,关联方式,key和关联方式值得进一步说明

  • key是一个 void 指针,必须唯一,通常使用static变量
  • 方式指关联对象是否转让,保留还是复制,关联是按原子级还是非原子级,这与声明属性的元属性类似( “Property Declaration Attributes”),你可以使用一个常量(见 objc_AssociationPolicy)来指定这种联系的方式

下面的例子显示如何建立一个数组和一个字符串之间的关联