Objective-C 中的 Category 就是對設計模式中裝飾模式的一種具體實現。它的主要做用是在不改變原有類的前提下,動態地給這個類添加一些方法。html
根據蘋果官方文檔對 Category 的描述,它的使用場景主要有三個:ios
源代碼略objective-c
思想:分類是在運行時決議的。設計模式
在這裏分了兩種狀況進行處理:Category 中的實例方法和屬性被整合到主類中;而類方法則被整合到元類中。另外,對協議的處理比較特殊,Category 中的協議被同時整合到了主類和元類中。app
注意:ui
主類中的方法和 Category 中的方法在 runtime 看來並無區別,它們是被同等對待的,都保存在主類的方法列表中。不過,類的方法列表字段有一點特殊,這裏不打算詳細描述,設計
能夠思考下+load()方法的執行順序爲何是 父類->子類->分類指針
提示:htm
runtime 對 Category 中方法的處理過程並無對 +load 方法進行什麼特殊地處理。所以,嚴格意義上講 Category 中的 +load 方法跟普通方法同樣也會對主類中的 +load 方法形成覆蓋,只不過 runtime 在自動調用主類和 Category 中的 +load 方法時是直接使用各自方法的指針進行調用的。因此纔會使咱們以爲主類和 Category 中的 +load 方法好像互不影響同樣。所以,當咱們手動給主類發送 +load 消息時,調用的一直會是分類中的 +load 方法,blog
Reference: