打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
objc 关联
  • UIAlertView的扩展

.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);}@end
  • UIButton的扩展

.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();}@end

tips: 使用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 void key);

这两个方法可以让一个对象和另一个对象关联,就是说一个对象可以保持对另一个对象的引用,并获取那个对象。有了这些,就能实现属性功能了。 policy可以设置为以下这些值:

enum {OBJC_ASSOCIATION_ASSIGN = 0,OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,OBJC_ASSOCIATION_COPY_NONATOMIC = 3,OBJC_ASSOCIATION_RETAIN = 01OBJC_ASSOCIATION_COPY = 01403};
  • UIAlertView的扩展

.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);}@end
  • UIButton的扩展

.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();}@end

tips: 使用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 void key);

这两个方法可以让一个对象和另一个对象关联,就是说一个对象可以保持对另一个对象的引用,并获取那个对象。有了这些,就能实现属性功能了。 policy可以设置为以下这些值:

enum {OBJC_ASSOCIATION_ASSIGN = 0,OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,OBJC_ASSOCIATION_COPY_NONATOMIC = 3,OBJC_ASSOCIATION_RETAIN = 01OBJC_ASSOCIATION_COPY = 01403};
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
浅析ios开发中Block块语法的妙用
OC最实用的runtime总结,面试、工作你看我就足够了!
如何自己动手实现 KVO
新手也看得懂的 iOS Runtime 教程
[iOS] iOS 黑魔法学习笔记
(译)Objective
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服