美文网首页
iOS利用runtime给Category增加成员变量

iOS利用runtime给Category增加成员变量

作者: 语文化及 | 来源:发表于2016-10-24 11:08 被阅读36次

iOS中我们可以通过Category对类进行扩展方法,通过Extension对类增加成员变量。这两种对现有类的扩展,我们用的都比较多,本文重点说一下Category的用法。
首先,新建一个分类UIView +TestCategory在头文件中声明一个property 属性。

@property (nonatomic,strong) NSString * string;

此时,我们只需要在.m文件中实现这个属性的setter/getter即可(如果不在.m里面实现setter和getter,在外面调用这个属性的时候扔能调用,而且编译通过,但运行会crash,因为系统没有自动帮我们生成对应的实例变量,需我们自己完成实现,具体实现如下)

下面是.m文件的实现部分

#import "UIView+TestCategory.h"
#import <objc/runtime.h>
static const NSString * stringKey = @"stringKey";
@implementation UIView (TestCategory)
//@dynamic 的作用是告诉系统setter和getter的方法由我们自己实现,不由系统自动实现。
@dynamic string;
-(NSString *)string{
    return objc_getAssociatedObject(self, (__bridge const void *)(stringKey));
}

-(void)setString:(NSString *)string{
    objc_setAssociatedObject(self, (__bridge const void *)(stringKey), string, OBJC_ASSOCIATION_COPY);
}
@end

此时,UIView就新增了一个属性string了,在ViewController里面测试一下:

 UIView * view1 = [[UIView alloc]init];
    view1.string = @"111";
    NSLog(@"%@",view1.string);

成功打印!

相关文章

网友评论

      本文标题:iOS利用runtime给Category增加成员变量

      本文链接:https://www.haomeiwen.com/subject/sbqluttx.html