參考:http://www.cocoachina.com/ios/20161018/17784.html
但文章說的有一些不對(duì)的地方:
1、定義兩個(gè)分類方法相同時(shí),調(diào)用該方法不會(huì)依次執(zhí)行所有類的方法,只會(huì)執(zhí)行Targets,Build Phases,Complie Source下最下面的類(本類不包含,本類是不會(huì)被執(zhí)行的)。
2、個(gè)人覺得分類和擴(kuò)展的不同在于
????1、分類只可以擴(kuò)展方法(但可以通過動(dòng)態(tài)去添加,實(shí)現(xiàn)get/set方法),擴(kuò)展可以擴(kuò)展方法和屬性。
? ? 2、擴(kuò)展在.h文件中聲明的是公開方法,需要去實(shí)現(xiàn)(雖然不實(shí)現(xiàn)也沒問題,但你聲明出來干啥?萬一別人調(diào)用了呢??埋坑等人踩???),在.m? ?文件中聲明是私有的。
? ? 3、分類可以在不修改原來類的基礎(chǔ)上,為一個(gè)類擴(kuò)展方法。而且最有用的是可以擴(kuò)展系統(tǒng)類,提供了不少便利;
3、回到最開始收集頁面啟動(dòng)時(shí)間的問題,本類是系統(tǒng)的類,這里是UIViewController,我們可以使用分類擴(kuò)展他的方法,也可以重寫他的方法,可以我需要在調(diào)用的地方加頭文件,所有子類都寫頭文件和直接在子類寫方法沒有什么區(qū)別,怎么樣可以使得不寫頭文件,子類就能調(diào)用我們寫的代碼呢?
? ? ? 我們可以進(jìn)行方法交換(這樣可以不必在調(diào)用的地方增加頭文件),從而使得在實(shí)現(xiàn)的時(shí)候調(diào)用重寫的方法。附鏈接
? ? ? 英文:Method Swizzling - NSHipster