Runtime的使用1 【 objc_setAssociatedObject 类添加属性】
来源:互联网 发布:js格式化日期函数 编辑:程序博客网 时间:2024/05/21 20:52
以view的点击事件UIGestureRecognizer为例子,使用block的方式进行回调。
首先我们创建一个UIGestureRecognizer的类别。
#import <UIKit/UIKit.h>typedef void(^MMGestureBlock)(id gestureRecognizer);@interface UIGestureRecognizer (Block)+ (instancetype)mm_gestureRecognizerWithActionBlock:(MMGestureBlock)block;@end
#import "UIGestureRecognizer+Block.h"#import <objc/runtime.h>@implementation UIGestureRecognizer (Block)static const int target_key;+ (instancetype)mm_gestureRecognizerWithActionBlock:(MMGestureBlock)block { __typeof(self) weakSelf = self; return [[weakSelf alloc]initWithActionBlock:block];}- (instancetype)initWithActionBlock:(MMGestureBlock)block { self = [self init]; [self addActionBlock:block]; [self addTarget:self action:@selector(wk_tapClick:)]; return self;}- (void)addActionBlock:(MMGestureBlock)block { if (block) { objc_setAssociatedObject(self, &target_key, block, OBJC_ASSOCIATION_COPY_NONATOMIC); }}- (void)wk_tapClick:(id)sender { MMGestureBlock block = objc_getAssociatedObject(self, &target_key); if (block) { block(sender); }}@end
我们使用objc_setAssociatedObject来给当前类添加一个关联。然后再使用objc_getAssociatedObject把关联的数据得到。然后进行后续的操作。
引入此类别#import"UIGestureRecognizer+Block.h"
UIView *viewM = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; viewM.backgroundColor = [UIColor grayColor]; [self.view addSubview:viewM]; [viewM addGestureRecognizer:[UITapGestureRecognizer mm_gestureRecognizerWithActionBlock:^(id gestureRecognizer) { NSLog(@"viewM点击事件-------"); }]];
这样我们就可以使用此方法来更简单的使用点击事件了。
阅读全文
0 0
- Runtime的使用1 【 objc_setAssociatedObject 类添加属性】
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
- ios runtime 动态属性objc_setAssociatedObject和objc_getAssociatedObject
- objc_setAssociatedObject的使用
- objc_setAssociatedObject 关联的使用
- objc_setAssociatedObject的简单使用
- runtime简单使用之动态添加属性
- 通过 objc_setAssociatedObject (关联) 的形式实现为Category (类别) 添加属性
- runtime动态添加属性
- 利用runtime添加属性
- Runtime 动态添加属性
- runtime -- 动态添加属性
- 浏览器打开微信公众号h5页面,增加cookie绕过微信授权登录
- iOS UITableView多选操作
- Linux ifconfig 地址127.0.0.1的解决
- Unity3D 官方文档 2D游戏的起始1 2D与3D的区别、细节,Sprite设置处理
- 安卓基础6:页面跳转及数据传递
- Runtime的使用1 【 objc_setAssociatedObject 类添加属性】
- VMware 虚拟机上不了网
- C语言中使用函数指针实现回调
- 电源模块的PCB设计
- 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP开发环境)
- MongoDB3.4对象存储(Journaling日志)
- Kafka学习笔记 --- Kafka消息机制
- Java中的四种引用介绍和使用场景
- PAT 1001. A+B Format (20)