iOS 关联的使用

关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。

使用关联,我们可以不用修改类的定义而为其对象增加存储空间。

关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。

创建关联

objc_setAssociatedObject

 

  1. static char Key;
  2. NSArray * array =[[NSArray alloc] initWidthObjects:@"red", @"green", @"blue", nil];
  3. NSString * string = [[NSString alloc] initWithFormat:@"color"];
  4. objc_setAssociatedObject(array, &Key, string, OBJC_ASSOCIATION_RETAIN);
  5. [string release];
  6. //(1) string仍然是可用的
  7. [array release];
  8. //(2)string 不可用

获取关联对象

objc_getAssociatedObject。

  1. NSString * associatedObject = (NSString *)objc_getAssociatedObject(array, &Key);

断开关联

objc_setAssociatedObject函数,传入nil值即可。

  1. objc_setAssociatedObject(array, &Key, nil, OBJC_ASSOCIATION_ASSIGN);

其中,被关联的对象为nil,此时关联策略也就无关紧要了。

使用函数objc_removeAssociatedObjects可以断开所有关联。

iOS 关联的使用

时间: 2024-10-07 07:28:01

iOS 关联的使用的相关文章

iOS关联对象

Associated Objects(关联对象)或者叫作关联引用(Associative References),是作为Objective-C 2.0 运行时功能被引入到 Mac OS X 10.6 Snow Leopard(及iOS4)系统.与它相关在<objc/runtime.h>中有3个C函数,它们可以让对象在运行时关联任何值: OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value,

IOS项目架构分享

1.项目分层:通过过往的一些项目经验,我们在IOS项目架构时候可以对项目进行如下图层: OpenSourceSDK,顾名思义,就是我们引入的一些第三方的开源工具,比如github上开源项目 MySDK 就是我们自己封装的一些SDK.可以在各个项目中能用的 需要重点介绍的就是我们的MVP结构,请接着往下看 -------------------------------------------------------------------------------------------------

关于backBarButtonItem的N种方法

今天在做项目的时候遇到一点小问题,后来自己解决了,也顺便思考了一下更深层次的东西,在这里分享一下~~ 替换返回按钮的文字 很多app的要求所有的返回按钮的title都是“返回”,如果上一层题目文字太多,下一层的返回按钮文字就会显示不完全,而且这样可以使软件显得整洁. 方法一: 最普通的想法,A界面的navigationItem.backBarButtonItem修改的是B(A的下一级)界面的返回按钮,所以可以写一个BaseViewController,让所有的UIViewController继承

iOS-扩大按钮点击范围

更新记录 2020年3月28日,初稿 文章背景 近日,接到头头突然让我改一个东西,让我马上把某个按钮的点击相应区域扩大一点.作为一个iOS三个月的新人,还真不了解要怎么做.随后,头头说只要加一行代码就行了,然后让某位前辈直接把参考代码发给我. 后来,我加了一行类似于如下的代码: [button setHitTestEdgeInsets:UIEdgeInsetsMake(-10, -10, -10, -10)]; 就使得按钮点击区域扩大了.但是,我不明白其中的原理.于是乎,想要一探究竟. 探索过程

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS XIB文件和UIViewController关联

1.在Cocoa Touch中创建ZYViewController视图控制器,在User Interface中创建一个view的bluleView.xib文件 2.点击bluleView.xib,然后Option+Command+3打开身份检查器,将默认的NSObject改成ZYViewController 3.在bluleView.xib中,按住Control键把File's Owner图标拖到view图标上,然后选择view,这样就使bluleView.xib和ZYViewControlle

iOS runtime实战应用:关联对象

在开始之前建议先阅读iOS runtime的基础理解篇:iOS内功篇:runtime 有筒子在面试的时候,遇到这样一个问题:"如何給NSArray添加一个属性(不能使用继承)",筒子立马蒙逼了,不能用继承,难道用分类?但是分类貌似只能添加方法不能添加属性啊,筒子百思不得其解,直到后来接触到了runtime才恍然大悟. 什么是关联对象 关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上.举个例子:xiaoming是Person类的一个实例,他的dog(一个OC对象)通过一根

iOS Rumtime 之关联引用

关联引用: 允许开发者为任何对象附着键值数据, 很常用的用法是为分类添加属性. 节目预告 1. 简单的关联引用 2. 为UIViewController 添加MBProgressHUD的HUB属性 3. 为UINavigationBar添加一个view属性 来完成动态改变UINavigationBar的外观 官方API是这样的, 下面这篇博客也是围绕这些来展开 // 关联策略枚举值 typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) { OB

ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接

这里是只是代码,因为博客插入图片效果不是很好,我自己写的总结比较详细,有兴趣的朋友可以在评论里留下邮箱,我收到后会发给大家. 转载注明出处,重视原创者的劳动成果,谢谢! - (void)viewDidLoad { [super viewDidLoad]; [self _creatTable];//插入数据 //    [self _query];// 查询数据 // KVC很霸道,即使readonly通过kvc也可赋值,kvo精华 //    Book * book = [[Book alloc