关于Runtime的一点个人理解

2017-03-07  本文已影响0人  小枫0804

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

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

上一篇 下一篇

猜你喜欢

热点阅读