首页 > 其他 > 详细

ios专题 - objc runtime 动态增加属性

时间:2014-02-17 18:57:21      阅读:436      评论:0      收藏:0      [点我收藏+]

objective-c中,有类别可以在不修改源码的基础上增加方法;近排在看别人的开源代码时,发现还可以动态增加属性。而且是在运行时,太牛B了。

使用运行时库,必须要先引入 objc/runtime.h

可以使用的函数如下:

OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

这个函数


OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);

 

兄弟们,看一个类别和动态添加属性的例子:

UILabel+Associate.h

bubuko.com,布布扣
#import <UIKit/UIKit.h>

@interface UILabel (Associate)

- (void) setFlashColor:(UIColor *) flashColor;

- (UIColor *) getFlashColor;

@end
bubuko.com,布布扣

UILabel+Associate.m

bubuko.com,布布扣
#import "UILabel+Associate.h"
#import <objc/runtime.h>

@implementation UILabel (Associate)

static char flashColorKey;

- (void) setFlashColor:(UIColor *) flashColor{
    objc_setAssociatedObject(self, &flashColorKey, flashColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIColor *) getFlashColor{
   return objc_getAssociatedObject(self, &flashColorKey);
}

@end
bubuko.com,布布扣

调用代码:

UILabel *lab = [[UILabel alloc] init];
    [lab setFlashColor:[UIColor redColor]];
    NSLog(@"%@", [lab getFlashColor]);

ios专题 - objc runtime 动态增加属性

原文:http://www.cnblogs.com/luoguoqiang1985/p/3551966.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!