iOS中开发中Associative机制使用场景

iOS中开发中Associative机制使用场景

ID:43324769

大小:56.50 KB

页数:5页

时间:2019-09-30

iOS中开发中Associative机制使用场景_第1页
iOS中开发中Associative机制使用场景_第2页
iOS中开发中Associative机制使用场景_第3页
iOS中开发中Associative机制使用场景_第4页
iOS中开发中Associative机制使用场景_第5页
资源描述:

《iOS中开发中Associative机制使用场景》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、iOS开发中Associative机制使用场景Associative机制使用场景这篇文章是來口蓝鸥郑州已经毕业的学员■郑同学投的稿件,虽然小编不懂技术,但看过的人都说:这篇文章写的不错。条理清晰,逻辑层层递进,适合iOS中级开发者学习!1•概念objective-c有两个扩展机制:category和associative。我们可以通过category来扩展方法,但是它有个很大的局限性,不能扩展属性。于是,就有了专门用来扩展属性的机制:associative。2•使用方法在iOS开发过程中,category比较常见,而associative就用的比较少。ass

2、ociative的主要原理,就是把两个对彖相互关联起来,使得其屮的一个对彖作为另外一个对彖的一部分。使用associative,我们可以彳、用修改类的定义血为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。associative是基于关键字的。因此,我们可以为任何对象增加任意多的associative,每个都使用不同的关键字即可。associative是可以保证被关联的对象在关联对象的整个生命周期都是可用的。associative机制提供了三个方法:•objc_setAssociatedObject(idobje

3、ct,constvoid*keyzidvalue,objc_AssociationPolicypolicy)•objc_getAssociatedObject(idobjectzconstvoiMkey)•objc_removeAssociatedObjects(idobject)2.1创建associative创建associative使用的是:objjsetAssocimtedObject。它把一个对彖与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象、关联策略。关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是

4、会采用静态变量來作为关键字。关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。比如,我们想对一个UlView,添加一个NSString类型的tag。可以这么做:-(void)setTagString:(NSString*)value{objc_setAssociatedObject(self,KEY_TAGSTRING,value,OBJC_ASsoC1AT1ON_RETA1N_NONATOM1C);}2.2•获取asso

5、ciative对象获取相关联的是函数objc_getAssociatedObjecto继续上面的例子,从_个UlView的实例中,获取一个NSString类型的tag-(NSString*)tagstring{NSObject*obj=objc_getAssociatedObject(Self,KEY_TAGSTRING);if(obj&&[objisKindOfclass:[NSStringclass]]){return(NSString*)obj;}returnnil;}2・3•断开associative断开associative是使用objc_setA

6、ssociatedObject函数,传入nil值即可。objc_setAssociatedObject(Self,KEY_TAGSTRINGZni1zobjc_assoCIATION_RETAIN_NONATOMIC);使用函数objc_removeAssociatedObjects也口」以断开所冇associative。通常情况下不建议这么做,因为他会断开所有关联。3.应用场景3.1.TagString上面的例子提到,在UlView'P添加NSString类型的标记,就是一个非常实用的例子。全部的代码如下:©interfaceUIVicw(BDTag)@p

7、roperty(nonatomic,retain)NSString*tegstring;-(UlVicw*)viewWithTagString:(NSString*)value;@end#importUIView+BDTag.h〃#undefKEY_TAGSTRING#defineKEY_TAGSTRING"UlView.tagString"©implementationUTView(BDTag)@dynamictagstring;-(NSString*)tagString{NSObject*obj=objc_getAssociatedObject(self

8、,KEY_TAGSTRING);if(obj&&[o

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。