zoukankan      html  css  js  c++  java
  • Objective-C 关联

           在项目开发中,经常会使用到关联,就是将两个实例对象绑定,使得其中一个实例对象成为另一个实例对象的一部分。关联特性在mac os 10.6 及ios 3.1以上才可以使用。

          关联的使用是基于关键字来实现,也就是说一个对象可以使用不同的关键字来实现随意多的关联。另外关联可以保证被关联者在关联对象的生命周期中都可以使用。

      对于关联的使用,分为创建关联,获取关联对象,解除关联。下面我就会对于以上三个环节进行相应的讲解。

      1.创建关联

      在使用关联的时候,是需要引用#import <objc/runtime.h> 头文件(运行时函数),在创建关联的时候是使用objc_setAssociatedObject来实现的。

    objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略。

     关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。

     

    关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。分为:OBJC_ASSOCIATION_ASSIGN ,OBJC_ASSOCIATION_RETAIN_NONATOMIC ,OBJC_ASSOCIATION_COPY_NONATOMIC,OBJC_ASSOCIATION_RETAIN , OBJC_ASSOCIATION_COPY 。实例如下:

       static char overviewKey;

       NSArray * array =[[NSArray alloc] initWidthObjects:@"One", @"Two", @"Three", nil];

       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值。关联策略无所谓,问题都不大。

      以上是我在项目中使用的一些心得,基本上能够满足一般的项目需求。

     

     

  • 相关阅读:
    无法嵌入互操作类型“-----”。请改用适用的接口
    DataGridView 控件用法(可能不是很全面,因为这是自己常常用到的一些小总结):
    实例化新的一个(new)
    用户 'sa' 登录失败。 (Microsoft SQL Server,错误: 18456)
    开始安装 ASP.NET (4.0.30319.18408)。 出现了错误: 0x8007b799 必须具有此计算机的管理员权限才能运行此工具
    Web 应用程序项目 MvcApplication1 已配置为使用 IIS。
    命名空间中的“MvcBuildViews”。 无效
    SQLServer存储过程入门
    golang fmt格式“占位符”
    go语言基本运算符
  • 原文地址:https://www.cnblogs.com/xishui2011/p/3681918.html
Copyright © 2011-2022 走看看