iOS之Runtime——如何優(yōu)雅地在category中給類關(guān)聯(lián)一個屬性

在category中給類關(guān)聯(lián)一個屬性备蚓,并用這個屬性去做一些事濒憋。
這個時候壶熏,通常我們會用到runtime的知識贬循。
代碼如下:

#import <UIKit/UIKit.h>

@interface UIViewController (BackgroundColor)

@property (nonatomic, strong) UIColor *backgroundColor;

@end
#import "UIViewController+BackgroundColor.h"
#import <objc/runtime.h>
#import <objc/message.h>

// clear warning
@interface NSObject ()

- (void)_setBackgroundColor:(UIColor *)color;

@end

@implementation UIViewController (BackgroundColor)

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    
    objc_setAssociatedObject(self, @selector(backgroundColor), backgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    void (*msgSend)(id, SEL, id) = (__typeof__(msgSend))objc_msgSend;
    msgSend(self, @selector(_setBackgroundColor:), backgroundColor);
}

- (UIColor *)backgroundColor {
    return  objc_getAssociatedObject(self, @selector(backgroundColor));
}

static inline void __jy_set_viewController_backgroundColor(id self, SEL _cmd, UIColor *color) {
    UIViewController *viewController = self;
    viewController.view.backgroundColor = color;
}

__attribute__((constructor)) static void __jy_set_viewController_backgroundColor_entry() {
    Class cls = NSClassFromString(@"UIViewController");
    IMP imp = (IMP)__jy_set_viewController_backgroundColor;
    class_addMethod(cls, @selector(_setBackgroundColor:), imp, "v@:@");
}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咸包,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杖虾,更是在濱河造成了極大的恐慌烂瘫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奇适,死亡現(xiàn)場離奇詭異坟比,居然都是意外死亡,警方通過查閱死者的電腦和手機嚷往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門葛账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皮仁,你說我怎么就攤上這事籍琳。” “怎么了贷祈?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵趋急,是天一觀的道長。 經(jīng)常有香客問我付燥,道長,這世上最難降的妖魔是什么愈犹? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任键科,我火速辦了婚禮闻丑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勋颖。我一直安慰自己嗦嗡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布饭玲。 她就那樣靜靜地躺著侥祭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茄厘。 梳的紋絲不亂的頭發(fā)上矮冬,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音次哈,去河邊找鬼胎署。 笑死,一個胖子當(dāng)著我的面吹牛窑滞,可吹牛的內(nèi)容都是我干的琼牧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼哀卫,長吁一口氣:“原來是場噩夢啊……” “哼巨坊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起此改,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤趾撵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后带斑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鼓寺,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年勋磕,在試婚紗的時候發(fā)現(xiàn)自己被綠了妈候。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挂滓,死狀恐怖苦银,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赶站,我是刑警寧澤幔虏,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站贝椿,受9級特大地震影響想括,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙博,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一瑟蜈、第九天 我趴在偏房一處隱蔽的房頂上張望烟逊。 院中可真熱鬧,春花似錦铺根、人聲如沸宪躯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽访雪。三九已至,卻和暖如春掂林,著一層夾襖步出監(jiān)牢的瞬間臣缀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工党饮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肝陪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓刑顺,卻偏偏與公主長得像氯窍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹲堂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉狼讨,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,686評論 0 9
  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,548評論 33 466
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,700評論 7 64
  • 據(jù)說這部影片是通過一個真實的故事改編制作完成的柒竞。故事講的是一個發(fā)生在英國歷史上的一個真實事件政供,述說的是英國的一艘名...
    無邊風(fēng)雨閱讀 404評論 1 1
  • 誰都說不清明天會發(fā)生什么,所以做了就是做了朽基,別后悔布隔,做一件少一件,別給自己留有遺憾稼虎。 聽到老年人自己說自己活不過今...
    凈土1990閱讀 904評論 0 0