用Runtime減少代碼量(objc/runtime.h的學(xué)習(xí))

分析

各看官請看 項目中有如下頁面需要實現(xiàn)


應(yīng)用截圖

優(yōu)雅的實現(xiàn)方式

當(dāng)然堂鲜,最優(yōu)雅的方式當(dāng)屬用UITableView+Model實現(xiàn)了羹应,其中丘逸,“提供服務(wù)人員信息”、“訂單服務(wù)信息”馏予、“訂單基本信息”為headerView天梧,其他的每一行“XXX:xxxxx”都是一個由model(Model)控制的cell,每個model中包含title和detail字段霞丧,配置好數(shù)據(jù)源呢岗、代理(Controller),具體的布局蛹尝、樣式邏輯就交給Cell(View)來控制就OK了后豫。
使用這種思想的方法,有一篇文章寫的很好突那,推薦一下寫一個iOS復(fù)雜表單的正確姿勢

逗逼版實現(xiàn)方式

從圖中可見挫酿,UILabel的數(shù)量極多,而其中又有三種字體愕难,分別為一級標(biāo)題早龟,二級標(biāo)題和內(nèi)容,其中有字號和字體粗細(xì)之分猫缭。
如果剛好碰巧葱弟,之前實現(xiàn)這個頁面的程序員非常耐dou心bi,所有l(wèi)abel都手動添加進(jìn)去猜丹,這時候需求來了芝加,要改Appearence。
如果手動設(shè)置字體射窒,不僅重復(fù)代碼多藏杖,而且不方便将塑,more,需要改變字號制市、增加UILabel等的話抬旺,將會十分麻煩。于是這時候可以利用OC之Runtime之便利祥楣,實現(xiàn)功能代碼以滿足項目需求开财。

逗逼版補救步驟

主要思路

  • 利用Runtime,取得當(dāng)前類的屬性列表
  • 通過便利屬性列表误褪,獲得title或detail的label屬性名
  • 利用KVC责鳍,通過屬性名取得當(dāng)前對象中的UILabel實例
  • 各種setFontsetColor......

實現(xiàn)代碼

    unsigned int count = 0;
    // 獲得屬性列表
    objc_property_t *propertyList =  class_copyPropertyList([self class], &count);
    for(int i=0; i<count; i++) {
        //取得屬性名
        objc_property_t property = propertyList[i];
        const char* propertyName = property_getName(property);
        //分情況進(jìn)行不同的操作兽间,此處分為detailLbl和titleLbl
        if (strstr(propertyName, "Title")) {
            UILabel *label = [self valueForKey:[NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
            [label setFont:[UIFont systemFontOfSize:kZFFontSizeThirdlyTitle weight:UIFontWeightRegular]];
        } else if (strstr(propertyName, "Detail")) {
            UILabel *label = [self valueForKey:[NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
            [label setFont:[UIFont systemFontOfSize:kZFFontSizeThirdlyTitle weight:UIFontWeightLight]];
        }
    }
    // 釋放資源
    free(propertyList);

總結(jié)

然而历葛,本文這種方式來使用Runtime是一種非主流的方式,只在特定業(yè)務(wù)或者編程需求下使用嘀略,正確的Runtime應(yīng)用恤溶,是在用于那些字典模型互相轉(zhuǎn)、實現(xiàn)多繼承帜羊、添加屬性關(guān)聯(lián)對象等功能上咒程,關(guān)于Runtime更多詳情可以看我的另一篇文章 Runtime學(xué)習(xí)筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市讼育,隨后出現(xiàn)的幾起案子帐姻,更是在濱河造成了極大的恐慌,老刑警劉巖奶段,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饥瓷,死亡現(xiàn)場離奇詭異,居然都是意外死亡痹籍,警方通過查閱死者的電腦和手機呢铆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來词裤,“玉大人刺洒,你說我怎么就攤上這事『鹕埃” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵鼎文,是天一觀的道長渔肩。 經(jīng)常有香客問我,道長拇惋,這世上最難降的妖魔是什么周偎? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任抹剩,我火速辦了婚禮,結(jié)果婚禮上蓉坎,老公的妹妹穿的比我還像新娘澳眷。我一直安慰自己,他們只是感情好蛉艾,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布钳踊。 她就那樣靜靜地躺著,像睡著了一般勿侯。 火紅的嫁衣襯著肌膚如雪拓瞪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天助琐,我揣著相機與錄音祭埂,去河邊找鬼。 笑死兵钮,一個胖子當(dāng)著我的面吹牛蛆橡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掘譬,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼泰演,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屁药?” 一聲冷哼從身側(cè)響起粥血,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酿箭,沒想到半個月后复亏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缭嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年缔御,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妇蛀。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡耕突,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出评架,到底是詐尸還是另有隱情眷茁,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布纵诞,位于F島的核電站上祈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登刺,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一籽腕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纸俭,春花似錦皇耗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至女轿,卻和暖如春箭启,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛉迹。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工傅寡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人北救。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓荐操,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珍策。 傳聞我的和親對象是個殘疾皇子托启,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件攘宙、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 細(xì)數(shù)下來到過的地方不多蹭劈,也不少疗绣,不過總覺得還是跟從沒到過任何地方一樣,對于城市的認(rèn)識都只是停留在淺淺铺韧,淺淺的層面上...
    江潯閱讀 274評論 0 0