利用类别(Category)为对象添加”实例变量”
来源:互联网 发布:北京网络安全员招聘网 编辑:程序博客网 时间:2024/05/01 00:33
转自: http://pimacun.72pines.com/2011/06/17/利用类别category为对象添加实例变量/
利用类别(Category)为对象添加”实例变量”
Posted by pimacun on 六 17, 2011 in 开发 |
Subscribe
主要利用ObjectiveC的C API中函数:
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)id objc_getAssociatedObject(id object, const void *key)
原理详细参见官方的ObjectiveC Runtime Reference.
好了,现在直接写怎么做了.
1.在定义类别之前, 引入runtime.
#import <objc/runtime.h>
2.定义&实现类别(以UIView为例)
定义:
@interface UIView(AddVariables)@property (nonatomic, retain) NSString *viewName;@end
实现:
// 定义存取的Keystatic const char *viewNameKey = "viewNameKey";@implementation UIView(AddVariables)// get方法- (NSString *)viewName { return (NSString *)objc_getAssociatedObject(self, viewNameKey);}// set方法- (void)setViewName:(NSString *)newViewNameKey { objc_setAssociatedObject(self, viewNameKey, newViewNameKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}@end
3.调用测试:
- (void)viewDidLoad { UIView *testView = [[UIView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:testView]; [testView release]; [testView setViewName:@"Nori's View"]; NSLog(@"[testView's newPropery]:%@", testView.viewName); [super viewDidLoad];}
输出结果如下:
testView's newPropery:Nori's View
工程Demo下载
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- 利用类别(Category)为对象添加”实例变量”
- objc之利用runtime为category添加成员变量
- 类别中添加实例变量
- category(类别)一则实例
- 为category添加属性和成员变量
- 利用Runtime为Category添加属性
- ios类别(category)不能添加成员变量但是可以添加属性的问题
- 通过 objc_setAssociatedObject (关联) 的形式实现为Category (类别) 添加属性
- category添加成员变量
- 59.通过 runtime为Category添加属性与成员变量
- Runtime(三)利用运行时来为类别添加属性
- MAKEWORD
- 谁是贼 [网易北京市网友]: 2012-06-26 11:29:23 发表 相关LD仰天长叹,哀民生之多艰;“我们做的还远远不够。”语毕,泪如雨下,举起手中的茅台一饮而尽……
- jquery attr()方法 添加,修改,获取对象的属性值。
- 谁是贼 [网易北京市网友]: 2012-06-26 11:29:23 发表 相关LD仰天长叹,哀民生之多艰;“我们做的还远远不够。”语毕,泪如雨下,举起手中的茅台一饮而尽……
- org.hibernate.HibernateException: No Hibernate Session bound to thread, and
- 利用类别(Category)为对象添加”实例变量”
- 使用VMware捕获Linux的串口输出来调试内核的Oops
- SQL重复记录查询
- RTC 3.0.1.3安装10 Free Developers License
- 用自定义协议调用自己的程序
- “WriteHuge”: 不是“CFile”的成员
- 无线AP下使用锐捷的一些事 【无线路由器 锐捷 无线上网 不能认证 AP】
- 价格奥秘-在超市遇见亚当斯密--第三章 为什么街角的咖啡馆总有足够的面包圈?
- 设计模式--单列模式