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可以删除指定对象实例的所有扩展属性。
可以用它来绑定数据到控件上,并可以自由读取。
分享到:
相关推荐
在这个例子中,我们为`UIView`添加了一个`borderColor`属性,利用`objc_setAssociatedObject`和`objc_getAssociatedObject`实现了属性的存取。 需要注意的是,虽然关联对象提供了很大的灵活性,但过度使用可能会...
return objc_getAssociatedObject(self, @selector(tagValue)); } - (void)setTagValue:(NSNumber *)tagValue { objc_setAssociatedObject(self, @selector(tagValue), tagValue, OBJC_ASSOCIATION_RETAIN_...
这里可以使用`objc_getAssociatedObject`和`objc_setAssociatedObject`来存取关联对象。 ```objc @implementation NSObject (MyCategory) - (NSString *)myProperty { return objc_getAssociatedObject(self, @...
这就是 `objc_setAssociatedObject`、`objc_getAssociatedObject` 和 `objc_removeAssociatedObjects` 这三个函数的作用,它们提供了关联对象的能力。 `objc_setAssociatedObject` 函数用于设置关联对象。它的基本...
iOS-关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects) 详解请参考:http://blog.csdn.net/u014220518/article/details/71750875
在这个项目中,我们将深入探讨`objc_setAssociatedObject`和`objc_getAssociatedObject`这两个API的用法,以及它们在实际开发中的应用。 1. **Runtime简介** Objective-C的Runtime系统是它区别于其他静态类型语言...
这项技术在使用时涉及三个关键的函数:objc_setAssociatedObject、objc_getAssociatedObject和objc_removeAssociatedObjects。这些函数能够让我们通过runtime进行底层操作,将一个对象和另一个对象进行关联。 objc_...
这里使用了`objc_setAssociatedObject`和`objc_getAssociatedObject`这两个Runtime函数,将`name`属性与ViewController对象关联起来,实现了属性的存取。 2. **Associated Objects**: 上述Category中,我们使用了...
使用`objc_setAssociatedObject`和`objc_getAssociatedObject`这两个API,我们可以将数据关联到特定的对象上。例如: ```objc objc_setAssociatedObject(self, @selector(hiddenFlag), @(YES), OBJC_ASSOCIATION_...
要访问私有属性,我们可以使用`objc_getAssociatedObject`和`objc_setAssociatedObject`函数,它们用于关联对象。例如: ```objc objc_setAssociatedObject(myObject, @"privatePropertyKey", @"New Value", OBJC_...
在Swift的标准库中,我们可以使用`objc_setAssociatedObject`和`objc_getAssociatedObject`来创建关联对象,但这两种方法都是基于Objective-C的,并且在Swift中使用时缺乏类型安全。`swift-tsao`库解决了这个问题,...
然后,使用`objc_setAssociatedObject`和`objc_getAssociatedObject`方法来设置和获取关联对象。 ```objc // 添加属性 static char associatedKey; - (void)setCustomProperty:(id)value { objc_...
- 可以使用关联引用将额外的信息与对象实例关联起来,使用objc_setAssociatedObject来设置关联对象,使用objc_getAssociatedObject来获取。 7. 消息传递(Sending Messages) - Objective-C的消息传递机制允许在...
objc_setAssociatedObject(imageView, &draggingCategoryName as Void*, draggingCategory, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) object_setClass(imageView, draggingCategory) } } ...
objc_setAssociatedObject(self, &MyPropertyKey, myProperty, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)myProperty { return objc_getAssociatedObject(self, &MyPropertyKey); } ``` 3. 动态属性...
2. 添加关联对象:在分类中,我们使用`objc_setAssociatedObject`和`objc_getAssociatedObject`来动态地添加一个关联属性`clickInterval`,用于存储按钮的点击间隔时间。 3. 重写`sendAction:to:forEvent:`方法:这...
objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size], OBJC_...
objc_setAssociatedObject(self, TitleKey, title, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSString *)title { return objc_getAssociatedObject(self, TitleKey); } ``` 在这个例子中,我们使用`TitleKey`...
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) 参数: object 关联者 key key与value是一一对应的关系,必须确保key全局唯一。...