利用类别(Category)为对象添加”实例变量”
来源:互联网 发布:国际交友软件开发 编辑:程序博客网 时间:2024/05/01 01:13
主要利用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
实现:
// 定义存取的Key
static 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
- 利用类别(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(三)利用运行时来为类别添加属性
- Linux下删除文件为何空间不释放
- 以时间为条件 select update
- 信息安全工程--可用性和心理学
- Java回调函数的理解
- 创意示范:苹果如何使用无线充电技术
- 利用类别(Category)为对象添加”实例变量”
- meta标签
- hadoop原理浅析及安装
- 有问题找MSDN------SIZEOF
- Liferay中vm模版文件要获取 SessionErrors方法
- C语言学习随笔
- db2 id 自增
- xml 中 extends 的使用
- 关于ibatis 查询少量字段 返回map 的method