關于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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容