美文网首页
OC运行时-关联对象的使用

OC运行时-关联对象的使用

作者: 377f66eb43c9 | 来源:发表于2017-06-17 23:30 被阅读12次

使用关联对象来存放自定义属性。

  1. 含义解释:就是在运行时动态的给某个对象添加属性,这种做法,需要在其他方法不可行的情况下考虑,因为这种做法会容易引入难以查找的bug!
关联类型 等效的属性
OBJC_ASSOCIATION_ASSIGN assign
OBJC_ASSOCIATION_RETAIN_NONATOMIC nonatomic, retain
OBJC_ASSOCIATION_COPY_NONATOMIC nonatomic, copy
OBJC_ASSOCIATION_RETAIN retain
OBJC_ASSOCIATION_COPY copy
关键方法
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)//
设置关联值
id objc_getAssociatedObject(id object, const void *key)//
取关联值
void objc_removeAssociatedObjects(id object)//
移除关联值

使用案例

需求:一个控制器上,需要添加多个alertView,在创建视图时就想把每个按钮的逻辑都写好。
-(void)answerUser{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"要退出吗?" message:nil delegate:self cancelButtonTitle:@"不" otherButtonTitles:@"是的", nil];
    alert.delegate = self;
    self.alertView = alert;
    
    void(^block)(NSInteger) = ^(NSInteger buttonIndex){
        if(buttonIndex == 0){
            [self doCancel];
        }else{
            [self doQuit];
        }
    };
    
    objc_setAssociatedObject(alert, alertViewKey, block, OBJC_ASSOCIATION_COPY);
    [alert show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    void(^block)(NSInteger) = objc_getAssociatedObject(self.alertView, alertViewKey);
    block(buttonIndex);
    
}

相关文章

  • OC运行时-关联对象的使用

    使用关联对象来存放自定义属性。 含义解释:就是在运行时动态的给某个对象添加属性,这种做法,需要在其他方法不可行的情...

  • Swift 为分类增加属性objc_getAssociated

    OC 获取关联对象 Swift 获取关联对象——错误的写法 Swift 获取关联对象——正确的写法 设置关联对象 ...

  • RunTime 简单总结

    什么事runtime runtime是动态运行时语言,oc是通过运行时确定对象的类型,使用c与汇编语言构成 oc主...

  • 关联对象 AssociatedObject

    主要包含两个方面内容: 使用关联对象为已经存在的类添加属性 关联对象在底层OC中的实现 @property可以说...

  • OC关联对象

    ,❓思考一下:分类中能否添加属性?能否添加成员变量?直接上代码验证一下:创建一个Person类和它的分类Perso...

  • OC 关联对象

    关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上. 举个栗子: mikey是Person类的一个实...

  • OC关联对象

    分类实现原理、加载时机[https://www.jianshu.com/p/7c830ce3c303] 一. 为什...

  • iOS 关联对象

    关联对象简单的说就是运用oc语言的运行时特性(runtime),给类别加属性(当然不止加属性).正常的类中创建一个...

  • Effective Objective-C 2.0总结

    一:了解OC语言的起源1.OC为C语言添加了面向对象的特性,是其超集。OC使用动态绑定的消息结构,在运行时才会检查...

  • OC动态性 的体现 及消息传递与转发机制

    OC动态性 oc的动态性主要体现三个方面 动态类型:运行时确定对象的类型 动态绑定:运行时确定对象的调用方法 动态...

网友评论

      本文标题:OC运行时-关联对象的使用

      本文链接:https://www.haomeiwen.com/subject/pvgbqxtx.html