對象方法:類對象的方法列表? ? ? 類方法:元類中方法列表
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