category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法;associative,可以通过它来扩展属性;在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及objc_setAssociatedObject,我们来看下这两个方法:
OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
另外还有一个方法:
OBJC_EXPORT void objc_removeAssociatedObjects(id object)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
objc_getAssociatedObject、objc_setAssociatedObject、objc_removeAssociatedObjects都是Obj-c中的外联方法,object 参数作为待扩展的对象实例,key作为该对象实例的属性的键,而value就是对象实例的属性的值,policy作为关联的策略,它的枚举包括:
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
};
具体我就多说了,可以看得懂的。
另外,objc_removeAssociatedObjects可以删除指定对象实例的所有扩展属性。
可以用它来绑定数据到控件上,并可以自由读取。
分享到:
相关推荐
iOS-OC-Runtime使用小谈(objc_setAssociatedObject)
iOS-关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects) 详解请参考:http://blog.csdn.net/u014220518/article/details/71750875
[Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects) - 站在巨人的肩膀上 - 博客频道 - CSDN.NET1
通过 objc_setAssociatedObject (关联) 的形式实现为Category (类别) 添加属性 如有不对敬请斧正
http://blog.csdn.net/lengshengren/article/details/16886915 博客demo
objective c 消息 objc_msgSend 及 performSelector 的使用例子。
专业版iOS混淆工具,马甲工具,提供试用版本,过机器审核,支持语言 c_c++_objc_objc++_swift 支持各种资源改名,混淆、一键出包,提供良好的UI界面,支持多包管理一包一特征,解决4.3问题.zip
精简详解,完整核心功能1.汇编入门:10分钟入门 - https://blackteachinese.github.io/2017/07/12/arm64/iOS开发汇编入门 - ...
InspectiveC, 用于调试/检查目的的objc_msgSend钩子 InspectiveC用于调试/检查目的的基于的MobileSubstrate 。 基于 itrace,采用 emeau,用saurik实现 AspectiveC,采用/实现了主观。记录输出为 /var/mobile/...
跟踪objc_msgSend(Track objc_msgSend)
WebKit is an open source browser engine corresponding to gecko (used by Mozilla Firefox etc.) Trident (also known as mshtml ie) and edgehtml (also known as chakra edge and other uwp browsers).At the ...
可直接将java语言翻译成obj-c语言工具
Google admob Demo
学习objc_msgSend过程的记录,精简且完整的hook核心功能详细注释
结合objc_class的数据结构,分析了objc_msgSend的具体执行流程
_objc_msgForward_demo用来测试消息转发机制对象查找selector时,先查找cachelist,如果没有则查找methodlist,如果还没有就查找父类的methodlist都没有是还有三次机会可以处理这次selector访问1. + (BOOL)...
Welcome to OA's HUD!一个简单的iOS HUD App 练习!声明本作品授权采用姓名标示-... *在[DaiInboxHUD]( )专案中,学习到objc/runtime.h、objc_setAssociatedObject、objc_getAssociatedObject、animateWithDuration的使
方法: objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy... objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
此功能为类实例提供了各种字典,可以使用运行时函数objc_setAssociatedObject()和objc_getAssociatedObject()在其中存储任意对象。 该项目旨在以轻巧且经过全面测试的方式使它们的使用更加方便。 在类别中添加...
利用 runtime 的 objc_getAssociatedObject , objc_getAssociatedObject方法 实现UIButton 的角标 自定义UIBarButtonItem实现角标 https://github.com/wangjianquan/BadgeButton 持续更新中...