- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS开发中Associative机制使用场景
Associative机制使用场景这篇文章是来自蓝鸥郑州已经毕业的学员-郑同学投的稿件,虽然小编不懂技术,但看过的人都说:这篇文章写的不错。条理清晰,逻辑层层递进,适合iOS中级开发者学习!
1.概念
objective-c有两个扩展机制:category和associative。我们可以通过category来扩展方法,但是它有个很大的局限性,不能扩展属性。于是,就有了专门用来扩展属性的机制:associative。
2.使用方法
在iOS开发过程中,category比较常见,而associative就用的比较少。associative的主要原理,就是把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
使用associative,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。
associative是基于关键字的。因此,我们可以为任何对象增加任意多的associative,每个都使用不同的关键字即可。associative是可以保证被关联的对象在关联对象的整个生命周期都是可用的。
associative机制提供了三个方法:
???objc_setAssociatedObject(idobject,constvoid*key,id value,objc_AssociationPolicypolicy)
???objc_getAssociatedObject(idobject,constvoid*key)
???objc_removeAssociatedObjects(idobject)
2.1创建associative
创建associative使用的是:objc_setAssociatedObject。它把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象、关联策略。
关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。
关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。
比如,我们想对一个UIView,添加一个NSString类型的tag。可以这么做:
-(void)setTagString:(NSString*)value{
objc_setAssociatedObject(self,KEY_TAGSTRING, value,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
2.2.获取associative对象
获取相关联的是函数objc_getAssociatedObject。继续上面的例子,从一个UIView的实例中,获取一个NSString类型的tag
-(NSString*)tagString{
NSObject*obj= objc_getAssociatedObject(self,KEY_TAGSTRING);
if (obj [obj isKindOfClass:[NSStringclass]]){
return(NSString*)obj;
}
returnnil;
}
2.3.断开associative
断开associative是使用objc_setAssociatedObject函数,传入nil值即可。
objc_setAssociatedObject(self,KEY_TAGSTRING, nil,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
使用函数objc_removeAssociatedObjects也可以断开所有associative。通常情况下不建议这么做,因为他会断开所有关联。
3. 应用场景
3.1.TagString
上面的例子提到,在UIView中添加NSString类型的标记,就是一个非常实用的例子。全部的代码如下:
@interface UIView(BDTag)
@property (nonatomic,retain)NSString*tagString;
-(UIView*)viewWithTagString:(NSString*)value;
@end
#importUIView+BDTag.h
#undef KEY_TAGSTRING#defineKEY_TAGSTRING
您可能关注的文档
- GIS配电装置的布置.docx
- GMAT小安阅读法造福无数人的mumuwa的南丁格尔篇解读示例.doc
- Golf基础知识:高尔夫球杆常识.doc
- Google支票收取地址的写法.doc
- GOOLE的找资料功能.doc
- goulixin如何减少新入园幼儿的分离焦虑[1].doc
- gPLIPLinux并口网络解决方.docx
- greatballsoffire的歌词.doc
- GRE填空双重否定解法.doc
- GridReport在VC中的使用方法.docx
- 2024至2030年中国人造棉面料行业投资前景及策略咨询报告.docx
- 重庆市渝中区遴选公务员2024年国家公务员考试考试大纲历年真题10340笔试历年典型考题及解题思路附.docx
- 2024至2030年中国甲基苯乙酮行业深度调研及发展预测报告.docx
- 2024至2030年中国羚羊角类饮片行业深度调查与前景预测分析报告.docx
- 重庆市面向中国农业大学定向选调2024届大学毕业生2024年国家公务员考试考试大纲历年真题14笔试历.docx
- 重庆市面向西北工业大学定向选调2024届大学毕业生00笔试历年典型考题及解题思路附答案详解.docx
- 中国不动杆菌感染治疗药行业市场现状分析及竞争格局与投资发展研究报告2024-2029版.docx
- 2024至2030年全球与中国ETL软件市场现状及未来发展趋势.docx
- 初中八年级(初二)生物下册期末考试1含答案解析.docx
- 干簧式继电器项目申请报告.docx
文档评论(0)