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

来源:互联网 发布:汽车行业数据查询 编辑:程序博客网 时间:2024/05/22 11:41

利用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除外),这个时候利用关联就能巧妙的解决这个问题。

0 0
原创粉丝点击