由Runtime的SwizzleMethods想到的類方法load和initialize方法之間有何不同
+load方法
1.+load方法是在main函數(shù)之前調(diào)用的励饵;
2.遵從先父類后子類臊岸,先本類后列類別的順序調(diào)用兜畸;
3.類,父類與分類之間的調(diào)用是互不影響的.子類中不需要調(diào)用super方法瓦宜,也不會調(diào)用父類的+load方法實現(xiàn);
4.無論該類是否接收消息凳枝,都會調(diào)用+load方法碟刺;
5.+load只調(diào)用一次;
+initialize方法
1.+initialize方法是在main函數(shù)之后調(diào)用的除抛;
2.+initialize方法遵從懶加載方式,只有在類或它的子類收到第一條消息之前被調(diào)用的;
3.子類中不需要調(diào)用super方法狮杨,會自動調(diào)用父類的方法實現(xiàn);
4.+initialize至多只調(diào)用一次到忽;
+load和+initialize對比圖
110844-fc6301e3b08fa26d.png
備注
當(dāng)用swizzleMethod時橄教,還有一種方法
就是c語言的 __attribute__((constructor)) void function()
此方法晚于+load,早于main
感謝騎神喘漏,讓我又get到一個方法;さ!