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
- Objective-c利用runtime给对象添加一个变量:objc_setAssociatedObject(关联)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- phpExcel常用方法详解大全
- SQL2005安装及连接
- QFiledialog添加控件
- 分布式原理整理1
- 把一个listmap 按照要求分成两个listmap
- Objective-c利用runtime给对象添加一个变量:objc_setAssociatedObject(关联)
- HTML5 自学 (一)
- Linux Advance--文件IO--创建一个具有空洞的文件
- hdu 2564 词组缩写
- IOS GCD线程的使用
- 代码大全
- KVO
- QFiledialog添加控件
- postgresql单机版安装部署