Runtime工作實用場景

2021-07-10 17:06:55 字數 1625 閱讀 7468

先說乙個我工作中用到的場景吧

產品經理說5s上字型太小了,專案比較大,設定字型的**太多了, 不可能乙個個改

這個時候runtime就派上用場了,我這裡交換的系統方法是willmovetosuperview

也可以交換systemfontofsize

也就是hook了系統的方法

零:交換方法

這裡就實現了把整個專案所有設定字型的方法替換了,以此類推,你也可以交換系統或者第三方庫的其他方法

細節方便需要自己判斷,防止崩潰

一:通過runtime檢視私有變數

案例一:修改uitextfield的佔位字型的顏色

可以使用attributedplaceholder

nsmutabledictionary *attrs = [nsmutabledictionary dictionary];

attrs[nsforegroundcolorattributename] = [uicolor redcolor];

self.textfield.attributedplaceholder = [[nsmutableattributedstring alloc] initwithstring:@"請輸入使用者名稱" attributes:attrs]

也可以使用runtime

可以拿到內部非公開的api:方法,屬性等等,然後通過kvc設定佔位字型的顏色

setvalue:forkeypath:

[self.textfield setvalue:[uicolor redcolor] forkeypath:@"_placeholderlabel.textcolor"];

或者 uilabel *placeholderlabel = [self.textfield valueforkeypath:@"_placeholderlabel"];

placeholderlabel.textcolor = [uicolor redcolor];

二:通過runtime字典轉模型 這個

github

很多比較好的字典轉模型框架都有用到比如:yymodel,mjextension

通過runtime獲取到成員變數,然後遍歷成員變數,拿到乙個成員變數,就去字典取

取到值,通過kvc設定值, setvalue:value

這裡只是寫個思路,細節問題很多都要需要處理

三:動態替換方法

imp class_replacemethod(class cls, sel name, imp imp, const char *types)

void myrun()

void test()), "v");

[person

run]; }

RunTime常用場景小結

1.訊息 機制 當呼叫某物件上某個方法 sendmessage 而該方法沒有實現時,系統會報unrecognized selector的異常。在此異常之前走了一圈流程 如圖 objc的執行時會給出三次拯救程式崩潰的機會。第一次 當這個類被呼叫乙個沒有實現的類方法 會呼叫 bool resolvecl...

iOS開發 runtime使用場景

1.訊息 import import objc msgsend id person class selector walk 2.獲取所有方法,變數 objc property t propertys class copypropertylist clazz,outcount 3.交換方法 aop 外...

mysql sql實用情景 sql實用場景

mysql字串的 123 轉換為數字的123 方法一 select cast 123 as signed 方法二 select convert 123 signed 方法三 select 123 0 length str1 length replace str,a regexp 0 9.如果stri...