ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
来源:互联网 发布:ai平面设计软件下载 编辑:程序博客网 时间:2024/05/01 16:11
//// ViewController.m// objc_runtime//// Created by 王飞 on 16/4/11.// Copyright © 2016年 com.startchina. All rights reserved.//#import "ViewController.h"#import <objc/runtime.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setTitle:@"点我" forState:UIControlStateNormal]; [self.view addSubview:btn]; [btn setFrame:CGRectMake(50, 50, 50, 50)]; btn.backgroundColor = [UIColor redColor]; [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; // Do any additional setup after loading the view, typically from a nib.}-(void)click:(UIButton *)sender{ NSString *message = @"你是谁"; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"我要传值·" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; alert.delegate = self; [alert show]; //#import <objc/runtime.h>头文件 //objc_setAssociatedObject需要四个参数:源对象,关键字,关联的对象和一个关联策略。 //1 源对象alert //2 关键字 唯一静态变量key associatedkey //3 关联的对象 sender //4 关键策略 OBJC_ASSOCIATION_ASSIGN // enum { // OBJC_ASSOCIATION_ASSIGN = 0, 若引用/**< Specifies a weak reference to the associated object. */ // OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /**< Specifies a strong reference to the associated object. // * The association is not made atomically. */ // OBJC_ASSOCIATION_COPY_NONATOMIC = 3, /**< Specifies that the associated object is copied. // * The association is not made atomically. */ // OBJC_ASSOCIATION_RETAIN = 01401, /**< Specifies a strong reference to the associated object. // * The association is made atomically. */ // OBJC_ASSOCIATION_COPY = 01403 /**< Specifies that the associated object is copied. // * The association is made atomically. */ // }; objc_setAssociatedObject(alert, @"msgstr", message,OBJC_ASSOCIATION_ASSIGN); //把alert和message字符串关联起来,作为alertview的一部分,关键词就是msgstr,之后可以使用objc_getAssociatedObject从alertview中获取到所关联的对象,便可以访问message或者btn了 // 即实现了关联传值 objc_setAssociatedObject(alert, @"btn property",sender,OBJC_ASSOCIATION_ASSIGN);}-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ //通过 objc_getAssociatedObject获取关联对象 NSString *messageString =objc_getAssociatedObject(alertView, @"msgstr"); UIButton *sender = objc_getAssociatedObject(alertView, @"btn property"); NSLog(@"%ld",buttonIndex); NSLog(@"%@",messageString); NSLog(@"%@",[[sender titleLabel] text]); //使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
0 0
- ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
- ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
- ios runtime objc_getAssociatedObject&objc_setAssociatedObject用法
- iOS关联,objc_getAssociatedObject, objc_setAssociatedObject
- iOS 关于objc_setAssociatedObject,objc_getAssociatedObject
- objc_setAssociatedObject和objc_getAssociatedObject
- objc_getAssociatedObject, objc_setAssociatedObject catrgory增加属性
- ios扩展机制objc_setAssociatedObject,objc_getAssociatedObject
- ios扩展机制objc_setAssociatedObject,objc_getAssociatedObject
- ios扩展机制objc_setAssociatedObject,objc_getAssociatedObject
- iOS-关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- objc_getAssociatedObject, objc_setAssociatedObject通过类目加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- 基于 iwarp下的lustre性能测试
- Android图片验证码的实现
- Java各种加密算法
- Java学习-1天
- Android Battery 开发(三) BatteryService
- ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
- AFNetworking请求服务器数据,有空指针导致请求数据报错。
- 2016一级建造师水利水电考点讲解:测量仪器的使用
- Java学习-2天
- memcache内存管理机制
- Ant的运用
- java队列和栈的使用
- Java学习-3天
- JavaBean mvc 三层架构