• objc_setAssociatedObject 使用(转)


    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    - (void)viewDidLoad {
        [super viewDidLoad];
       
         
    //    static const char associatedButtonkey;
         
         
         
        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可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。
    }
     
    终端打印:
    2015-07-22 16:18:35.294 test[5174:144121] 0
    2015-07-22 16:18:35.295 test[5174:144121] 你是谁
    2015-07-22 16:18:35.295 test[5174:144121] 点我
  • 相关阅读:
    The Snail
    Oil Deposits
    杭电3784(继续xxx定律)
    poj 2395 Out of Hay
    poj 2485 Highways(简单题)
    poj 2560 || 杭电1162
    Rescue
    “中国芯”能抗衡英特尔吗?
    2013,中国计算巨头放眼国际市场
    123063天两度瘫痪:为啥不在淘宝上卖火车票?
  • 原文地址:https://www.cnblogs.com/xiaoxiaoyublogs/p/5446185.html
Copyright © 2020-2023  润新知