objc_setAssociatedObject与Block的简单使用
2016-08-01 18:30
316 查看
转自:http://www.jianshu.com/p/35df1ba1f107UIAlertView的扩展.h文件
#import <UIKit/UIKit.h> typedef void (^successBlock)(NSInteger buttonIndex); @interface UIAlertView (Block)<UIAlertViewDelegate> - (void)showWithBlock:(successBlock)block; @end.m文件
#import "UIAlertView+Block.h" #import <objc/runtime.h> static const char alertKey; @implementation UIAlertView (Block) - (void)showWithBlock:(successBlock)block { if (block) { objc_setAssociatedObject(self, &alertKey, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC); self.delegate = self; } [self show]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { successBlock block = objc_getAssociatedObject(self, &alertKey); block(buttonIndex); } @endUIButton的扩展.h文件
#import <UIKit/UIKit.h> typedef void (^btnBlock)(); @interface UIButton (Block) - (void)handelWithBlock:(btnBlock)block; @end.m文件
#import "UIButton+Block.h" #import <objc/runtime.h> static const char btnKey; @implementation UIButton (Block) - (void)handelWithBlock:(btnBlock)block { if (block) { objc_setAssociatedObject(self, &btnKey, block, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } [self addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside]; } - (void)btnAction { btnBlock block = objc_getAssociatedObject(self, &btnKey); block(); } @endtips: 使用objc_setAssociatedObject,需要引入头文件
#import <objc/runtime.h>void objc_setAssociatedObject(id object, const void key, id value, objc_AssociationPolicy policy);id objc_getAssociatedObject(id object, const voidkey);这两个方法可以让一个对象和另一个对象关联,就是说一个对象可以保持对另一个对象的引用,并获取那个对象。有了这些,就能实现属性功能了。 policy可以设置为以下这些值:
enum {OBJC_ASSOCIATION_ASSIGN = 0, OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, OBJC_ASSOCIATION_COPY_NONATOMIC = 3, OBJC_ASSOCIATION_RETAIN = 01 OBJC_ASSOCIATION_COPY = 01403 };
相关文章推荐
- objc_setAssociatedObject与Block的简单使用
- iOS中关联对象的简单使用(objc_setAssociatedObject)
- iOS中关联对象的简单使用objc_setAssociatedObject
- objc_setAssociatedObject的简单使用
- iOS中关联对象的简单使用(objc_setAssociatedObject)
- iOS中关联对象的简单使用objc_setAssociatedObject
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- 关于运行时的方法使用:objc_setAssociatedObject
- objc_setAssociatedObject 使用(转)
- 使用objc_getAssociatedObject, objc_setAssociatedObject动态扩展属性
- objc_setAssociatedObject的使用
- Swift 3 使用objc_setAssociatedObject
- objc_setAssociatedObject 使用
- objc_setAssociatedObject 使用
- objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAsso使用场景
- 关于运行时的方法使用:objc_setAssociatedObject
- swift objc_setAssociatedObject block(version1.2 xcode6.4)
- objc_setAssociatedObject 关联的简单用法
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性