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

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);

成功打印!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,405评论 30 472
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 7,393评论 0 20
  • (一)Category category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其...
    小李龍彪阅读 8,035评论 0 10
  • 我们架起一座桥梁 那是一座连心桥 连着田野的希望 连着农民的时光 我们扛起伟大的红旗 为了实现中国梦阔步前进 农村...
    银河谜米阅读 3,237评论 0 0
  • 一,如果选择的是一下两种, 那么和下图的名称一样![3UI@N]0PSZP@I1@FCY9PVCS.jpg](ht...
    未知的远方阅读 1,747评论 0 0

友情链接更多精彩内容