关于Runtime的一点个人理解

对象方法:类对象的方法列表      类方法:元类中方法列表

1.通过isa去对应的类中查找

2.注册方法编号

3.根据方法编号去查找对应方法

4.找到只是最终函数实现地址,根据地址去方法区调用对应函数

一、 交换方法

首先需要导入 #import<objc/message.h>

.h文件

@interfaceUIImage (YBF)


+ (UIImage*)YBF_imageNamed:(NSString*)name;

@end

.m 文件

@implementationUIImage (YBF)

+ (void)load {

MethodimageNameMethod =class_getClassMethod(self,@selector(imageNamed:));

MethodYbfImageNameMedhod =class_getClassMethod(self,@selector(YBF_imageNamed:));

method_exchangeImplementations(YbfImageNameMedhod, imageNameMethod);

}

+ (UIImage*)YBF_imageNamed:(NSString*)name {

UIImage*image = [UIImageYBF_imageNamed:name];  // 这里需要调用方法的本身,因为前面已经交换方法了,所以这里实际调用的是系统的imageNamed:方法

if(image) {

NSLog(@"成功");

}else{

NSLog(@"失败");

}

returnimage;

}

@end

二、添加属性

.h 文件

@interfaceNSObject (YBF)

@propertyNSString*name;

@end

.m 文件

@implementationNSObject (YBF)

- (void)setName:(NSString*)name {

objc_setAssociatedObject(self,@"name", name,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

- (NSString*)name {

returnobjc_getAssociatedObject(self,@"name");

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容