先說乙個我工作中用到的場景吧
產品經理說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...