iOS动态挂载对象整理
来源:互联网 发布:青岛网络电视户外运动 编辑:程序博客网 时间:2024/05/16 10:41
1. 动态关联对象
OBJC_EXPORT void objc_setAssociatedObject(id object,const void * key,id value, objc_AssociationPolicy policy)
1)参数一:id object,被关联对象
2)参数二: const void *key,被关联对象的键值,后期通过此键值获取关联数据id value
3)参数三: id value,被关联对象关联的数据
4)参数四: objc_AssociationPolicy,关联协议
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC= 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN= 01401,
OBJC_ASSOCIATION_COPY= 01403
};
typedefuintptr_t;objc_AssociationPolicy;
以UIAlertView为例:
#import<objc/runtime.h>
static const char kRepresentedObject;
-(void)showAlert:(id)sender
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"去看看", nil];
alert.tag = ALERT_GOTO_TAG;
objc_setAssociatedObject(alert, &kRepresentedObject,
@"我是被挂载的",
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[alert show];
}
2.objc_getAssociatedObject 动态获取关联对象
OBJC_EXPORT id objc_getAssociatedObject(id object,const void * key)
返回值: objc_setAssociatedObject中键(第二个参数)所对应的值id value
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
NSString *str = objc_getAssociatedObject(alertView, &kRepresentedObject);
NSLog(@"%@",str)
}
}
2. 移除关联
将id value置为nil,
objc_setAssociatedObject(alert, &kRepresentedObject, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
被关联的对象为nil,关联政策也就无所谓了.
OBJC_EXPORT void objc_removeAssociatedObjects(id object)
通常情况下不适用这个函数,因为会断开对象所有关联,只在需要把对象恢复到”原始状态”时才调用此函数.
参考资料:http://www.cocoachina.com/cms/wap.php?action=article&id=8570
http://blog.csdn.net/onlyou930/article/details/9299169
http://m.blog.csdn.net/blog/csz0102/19555673#
- iOS动态挂载对象整理
- iOS动态关联对象
- 给IOS对象添加动态属性
- 给IOS对象添加动态属性
- IOS 整理
- iOS 笔记一: 对象创建、动态绑定、内审
- iOS开发------runtime关联对象(动态添加属性)
- 动态对象
- iOS动态特性初研究(利用JSON动态创建类型和对象)
- [原]iOS动态特性初研究(利用JSON动态创建类型和对象)
- 动态修改SiteMapPath(整理)
- 动态代理散件整理
- 动态规划优化整理
- MySql 动态行转列整理
- (动态规划整理)
- 动态规划整理(二)
- 动态规划算法整理
- 人工智能动态整理
- lua实现cocos多边形碰撞检测
- 手机版本用户不可以缩放网页设置。
- Android开发最佳实践
- 一道腾讯校招试题
- 第三章第45题
- iOS动态挂载对象整理
- 新SAT数学样题及答案Question 19
- UNICODE,GBK,UTF-8区别
- 扬中在逃犯罪人员信息记录查询
- 告别ORM
- android开发实践
- andoirdUI那些事(二)
- MFC六大关键技术之仿真学习笔记(二)
- 关于苹果的xcode和ios升级