在项目开发中,常常会使用到关联,就是将两个实例对象绑定,使得其中一个实例对象成为另外一个实例对象的一部分。关联特性在mac os 10.6 及ios 3.1以上才可使用。ios
关联的使用是基于关键字来实现,也就是说一个对象可使用不一样的关键字来实现随意多的关联。另外关联能够保证被关联者在关联对象的生命周期中均可以使用。函数
对于关联的使用,分为建立关联,获取关联对象,解除关联。下面我就会对于以上三个环节进行相应的讲解。spa
1.建立关联指针
在使用关联的时候,是须要引用#import <objc/runtime.h> 头文件(运行时函数),在建立关联的时候是使用objc_setAssociatedObject来实现的。调试
objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)该函数须要四个参数:源对象,关键字,关联的对象和一个关联策略。orm
关键字是一个void类型的指针。每个关联的关键字必须是惟一的。一般都是会采用静态变量来做为关键字。对象
关联策略代表了相关的对象是经过赋值,保留引用仍是复制的方式进行关联的;还有这种关联是原子的仍是非原子的。这里的关联策略和声明属性时的很相似。这种关联策略是经过使用预先定义好的常量来表示的。分为:OBJC_ASSOCIATION_ASSIGN ,OBJC_ASSOCIATION_RETAIN_NONATOMIC ,OBJC_ASSOCIATION_COPY_NONATOMIC,OBJC_ASSOCIATION_RETAIN , OBJC_ASSOCIATION_COPY 。实例以下:three
static char overviewKey;生命周期
NSArray * array =[[NSArray alloc] initWidthObjects:@"One", @"Two", @"Three", nil];ci
NSString * overview = [[NSString alloc] initWithFormat:@"@",@"First three numbers"];
objc_setAssociatedObject(array, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN);
以上代码就将array和overview关联在一块儿。建立完关联,咱们会在其它的地方要经过overviewKey来获取overview,那接下来,咱们要分析分析,咱们该怎么样来经过overviewKey来获取overview。
2.获取关联对象
获取相关联的对象时使用Objective-C函数objc_getAssociatedObject(id object, const void *key),对应的参数就是关联者和关联关键字。代码实例以下
NSString *overview = objc_getAssociatedObject(array,overviewKey);
3.断开关联
断开关联有两种方法,首先,断开全部的关联咱们能够采用objc_removeAssociatedObjects方法。基本上不大建议这种方法,由于这种方法将该对象的其它的相应的关联也给断开了,在项目中应用可能会带来一些之外的bug,而且可能调试起来比较麻烦。那咱们平时须要作的就是经过什么关键字段来创建的关联,我怕们就应该断开咱们建立的关联。那这种方法咱们使用的是objc_setAssociatedObject(array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN);咱们给关联者关联一个nil值。关联策略无所谓,问题都不大。
以上是我在项目中使用的一些心得,基本上可以知足通常的项目需求。