Object-c Associated Object
oc的关联的作用在我看来就是将两个对象关联起来,用的时候通过key和对象把和这个对象关联的对象再取出来(我做的项目就是和UITableView里面的一个属性关联起来了)
举个栗子:
- (void)viewDidLoad {[super viewDidLoad];UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];button.frame = CGRectMake(100, 100, 100, 100);[button setTitle:@"关联測试" forState:UIControlStateNormal];[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[button addTarget:self action:@selector(buttonTap) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:button];
}- (void)buttonTap{UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@""message:@"How (are) you doing" delegate:self cancelButtonTitle:@"Not bad" otherButtonTitles:@"Fine", nil];void (^block)(NSInteger) = ^(NSInteger buttonIndex){if (buttonIndex == 0) {NSLog(@"buttonIndex:0");}else{NSLog(@"buttonIndex:1");}};objc_setAssociatedObject(alert, key, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC);[alert show];}- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{void (^block)(NSInteger) = objc_getAssociatedObject(alertView, key);block(buttonIndex);
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];}@end
上面的栗子就是把alert和block关联起来,你关联的什么对象类型,取得就是什么对象类型,然后利用取出来的对象做你想做的事,上面的栗子就是取出block。完了在block里面做你想做的事,而且block在alert后面。使你看代码更easy一些。(在我看来。然并卵),这个栗子也算是我从《Effective Object-c》借鉴来的,真心认为这个自己不太好,可是对于理解对象关联够用了。OBJC_ASSOCIATION_RETAIN_NONATOMIC这个和(nonatomic,retain)是一样的作用。例如以下表
OBJC_ASSOCIATION_ASSIGN | @property (assign) or @property (unsafe_unretained) | Specifies a weak reference to the associated object. |
OBJC_ASSOCIATION_RETAIN_NONATOMIC | @property (nonatomic, strong) | Specifies a strong reference to the associated object, and that the association is not made atomically. |
OBJC_ASSOCIATION_COPY_NONATOMIC | @property (nonatomic, copy) | Specifies that the associated object is copied, and that the association is not made atomically. |
OBJC_ASSOCIATION_RETAIN | @property (atomic, strong) | Specifies a strong reference to the associated object, and that the association is made atomically. |
OBJC_ASSOCIATION_COPY | @property (atomic, copy) | Specifies that the associated object is copied, and that the association is made atomically. |
并且。用block还要注意循环引用的问题。这个在这里就不多说了,我个人觉得http://kingscocoa.com/tutorials/associated-objects/这个写的不错,是全英文的。只是不难,建议能够看看,理解问题会更上一层楼,这个博客解说了为什么用关联,举得栗子就是正常写的情况下,记录你要删除的cell的IndexPath。会把这个IndexPath弄成全局变量来记录。完了操作删除,可是要想到一个问题就是我要是在其它地方也操作这个值不就会乱套么,或者我就用一次,用全局变量就太麻烦了,所以索性用关联记录这个值,于是能够模仿我上面的栗子写,只是博主用了三种方法阐述。第一个就是想我上面栗子一样正常写,另外一种就是给NSObject加拓展方法。传入对象和关联的值。第三种就是给UIALertView加类方法,把IndexPath设置成属性,重写setter和getter方法,我觉得博主的想法非常巧妙。希望借鉴,谢谢
參考链接:http://nshipster.com/associated-objects/
http://kingscocoa.com/tutorials/associated-objects/
Object-c Associated Object相关推荐
- java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object解决
完整报错如下: 19/05/15 15:26:10 WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.Na ...
- Object family 在Object search中的default逻辑
Created by Jerry Wang on Jul 26, 2014 使用IC service desktop business role IC_ITSDAGENT 登陆系统,进行object ...
- Object o = new Object()在内存中占几个字节
CAS: Compare and Swap,即比较再交换. jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐 ...
- ES6~ES12——Array Includes、Object values、Object entries、Object fromEntries、flat、flatMap、空值合并运算符、可选链等
一.ES7 - Array Includes 在ES7之前,如果我们想判断一个数组中是否包含某个元素,需要通过 indexOf 获取结果,并且判断是否为 -1. 在ES7中,我们可以通过include ...
- Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class
From:Java中泛型 Class<T>.T 与 Class<?>. Object类 和 Class类. object.getClass() 和 Object.class : ...
- MFC中 windows object 和 C++ object
MFC中 windows object 和 C++ object The Problem Windows objects are normally represented by HANDLEs. Th ...
- es6 Object.keys(),Object.values(),Object.entries()
Object.keys(),Object.values(),Object.entries() Object.keys() ES5 引入了Object.keys()方法,返回一个数组,成员是参数对象自身 ...
- es6 __proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf() JavaScript 语言的对象继承是通过原型链实现的.ES6 提供了更多原型对 ...
- smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?
正文约: 2900字 预计阅读时间: 8分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 moon不讲武德!!!一个类加载机制给面试官说蒙了!! 小小面试一下 前言蜜语 最近马师傅火的不要 ...
- 面试官:Object o = new Object() 占用了多少字节?
作者 | 哪儿来的moon 责编 | 张文 头图 | CSDN 下载自视觉中国 来源 | 哪儿来的moon(ID:onetraveller_llxz) 面试的时候,要是面试官问了标题那种问题,你知道 ...
最新文章
- js MediaSource h264
- python编程有哪些-学习python编程,有哪些不错的软件?
- java异常体系分类(面试)
- ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么
- 打字机已经被计算机所取代用英语,无法被电脑所取代的职业
- [翻译] Visual Studio 2019 RC版发布
- 苹果台式电脑怎么开机_龙华苹果电脑回收公司,台式电脑回收公司电话
- Element Tree型控件
- 我的docker随笔8:docker容器相互访问
- LeetCode(389)——找不同(JavaScript)
- iOS多线程系列之GCD栅栏(barrier)实现同步锁
- NSArray 的遍历
- 数据库SQL Server 2019下载安装详细教程
- 简单说说WinHex(一)安装注册过程
- AD7705-模数转换器-工作原理介绍
- 计算机专业实训图片,实训一图片的简单处理_计算机软件及应用_IT计算机_专业资料...
- 详解 JavaScript 的发展史
- vue:前端导出PDF 加图片:前端
- robots.txt文件的Disallow和Allow行的区别
- sql范围年龄分组查询人数
热门文章
- is和as在类型转换时的性能差异
- 利用gsoap工具,通过wsdl文件生成webservice的C++工程文件
- github创建远程仓库
- 搭建SpringMVC
- .Net Core[译文]
- 【程序员的自我修养——链接、装载与库】笔记
- centos,apache运维经验
- 遍历~筛选~eq();filter();first();last();has();is();map();slice()
- 【ACwing 95】费解的开关——枚举 + 搜索
- 1.java-谈谈接口