0
点赞
收藏
分享

微信扫一扫

iOS Runtime的应用场景

今天简单来说下runtime的具体应用场景有哪些?

1.给分类添加属性

正常来说分类是不能添加属性的,但是利用runtime的机制就可以实现这个功能,主要是通过关联对象的方式实现,代码如下:

// .h代码
#import <Foundation/Foundation.h>

@interface NSObject (Name)

@property (nonatomic,copy)NSString *name;

@end

// .m代码

#import "NSObject+Name.h"
#import <objc/runtime.h>

static void *keyName = &keyName;
@implementation NSObject (Name)

-(void)setName:(NSString *)name
{
    objc_setAssociatedObject(self, keyName, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name
{
    return objc_getAssociatedObject(self, keyName);
}

@end

2.解决方法找不到的异常报错问题,防止闪退等。

主要是通过消息转发的机制来解决,具体实现主要是通过消息转发那几个方法去做一些相应的拦截处理,防止崩溃等。

3.方法交换。

有些类提供的方法不够我们使用,需要我们重写那个方法。主要通过class_getClassMethod来定义方法名,以及method_exchangeImplementations这个方法进行方法交换。

4.历类的所有成员变量。

历类的所有成员变量可以修改很多东西,比如textfiled的placeholder文字大小和颜色等。主要是classcopymethlist这个方法获取到成员数组,找到对应要修改的成员变量名,然后通过kvc的形式去修改。

5.未完待续。。。。。。
举报

相关推荐

0 条评论