一行代碼實現IOS runtime知識

收藏待读

一行代碼實現IOS runtime知識

使用起來也很簡單:

導入 #import "TFRuntimeManager.h" 頭文件

1、獲取所有屬性名,例如獲得UIButton的屬性變量

NSArray *list = [TFRuntimeManager TF_getAllIvarWithClass:[UIButton class]];

2、獲得所有方法名,例如獲得UIButton的方法名稱

NSArray *list = [TFRuntimeManager TF_getAllMethodWithClass:[UIButton class]];

3、交換兩個方法,例如將UIButton裏面的 setTitle:forState: 方法與當前類中的 setTitleName: withState: 方法交換

[TFRuntimeManager TF_exchangeMethodSourceClass:[UIButton class] sourceSel:@selector(setTitle:forState:) targetClass:[self class] targetSel:@selector(setTitleName: withState:)];

4、取代某個方法,例如將UIButton裏面的 setTitle:forState: 方法替換為當前類中的 setTitleName: withState:

[TFRuntimeManager TF_replaceMethodSourceClass:[UIButton class] sourceSel:@selector(setTitle:forState:)  targetClass:[self class] targetSel:@selector(setTitleName: withState:)];

5、字典轉模型,例如將dic的內容轉換為TFChangeModel模型對象

NSDictionary *dic = @{@"name":self.name.text ,                      @"gender":self.gender.text,                      @"age":self.age.text};
TFChangeModel *model = [TFRuntimeManager TF_modelWithDict:dic model:[TFChangeModel class]];

6、歸檔解檔,例如將TFChangeModel歸檔解檔

//創建路徑NSString *documentPath      = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];NSString *filePath          = [documentPath stringByAppendingPathComponent:@"TFChangeModel.plist"];
TFChangeModel *model        = [[TFChangeModel alloc] init];
model.name                  = @"張三";
model.gender                = @"男";
model.age                   = @"25";//歸檔BOOL result = [TFRuntimeManager TF_archive:[model class] model:model filePath:filePath];//解檔
 model  = [TFRuntimeManager TF_unarchive:[TFChangeModel class] filePath:filePath];

這就是我的一些封裝,主要的實現都在 TFRuntimeManager 類中,可以快速使用runtime,具體的實現大家可以下載demo查看: https://github.com/zhangyqyx/runtime

最後補充一下在分類中利用runtime來添加屬性

1、導入頭文件#import 2、聲明屬性

/**題目 */@property (nonatomic , strong)UILabel *title;

3、申明一個key值

static NSString *TFTitleKey       = @"TFTitleKey";

4、重寫set、get方法

 //get方法- (UILabel *)title {return objc_getAssociatedObject(self, &TFTitleKey);
}//set方法- (void)setTitle:(UILabel *)title {
objc_setAssociatedObject(self, &TFTitleKey, title, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

這樣就成功添加了一個屬性。

希望大家能提出寶貴的意見,可以給我留言,也可以發郵件到我的郵箱: [email protected]

謝謝大家,如果你有更好的想法或文章請告知,不勝感激。

作者:誰遇而安

鏈接:https://www.jianshu.com/p/f5437ecc610a

原文 : CocoaChina

相關閱讀

免责声明:本文内容来源于CocoaChina,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。