Objective-c利用runtime给对象添加一个变量:objc_setAssociatedObject(关联)

本文介绍了如何使用objc_setAssociatedObject方法在不改变类结果的情况下,为类增加内存以存放变量,并详细解释了关联变量的作用及应用场景。包括如何设置变量的赋值方式和取消关联变量,特别强调了该特性的实用性和灵活性。
摘要由CSDN通过智能技术生成

利用objc_setAssociatedObject可以在不改变类结果的情况,为类增加一块内存,存放一些变量。

方法很简单,只要为你增加的变量设置一个key就行了!同时需要设置变量的赋值方式比如说,retain活着assign,或者是否automitic

NSString* myStr = @"string";
    const char* key = "key";
    NSArray* arr = [[NSArray alloc] initWithObjects:@"hello", @"world", @"!", nil
                    ];
    
    //设置关联变量
    objc_setAssociatedObject(arr,key,myStr,OBJC_ASSOCIATION_RETAIN);
    
    //获取关联变量
    NSLog(@"my associatedobjct:%@",objc_getAssociatedObject(arr, key));
    
    //取消该关联变量,置空
    objc_setAssociatedObject(arr, key, nil, OBJC_ASSOCIATION_RETAIN);
    
    //取消全部关联变量
    objc_removeAssociatedObjects(arr);

这个特性用起来很简单,但是作用确不小。试想一下,如果你有很多同一个类的对象,你想给每一个对象设置一个标识符来标示这是第几个对象。

如果是C++里,你可能最容易想到的方法就是在这个类里增加一个变量,作为其标识符。但是这样取改变了原本类的结果,如果你是用的一个库,不能改变其结果,那就更麻烦了,你还得先继承这个类。


OC里的关联另一个用处就是,给category(分类)添加一个变量。我们都知道category是不可以有变量的(extension除外),这个时候利用关联就能巧妙的解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值