对象方法:类对象的方法列表 类方法:元类中方法列表
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