分類:
Category
Category 是表示一個指向分類的結(jié)構(gòu)體的指針淘邻,其定義如下:
typedef struct objc_category *Category;
struct objc_category {
char *category_name OBJC2_UNAVAILABLE; // 分類名
char *class_name OBJC2_UNAVAILABLE; // 分類所屬的類名
struct objc_method_list *instance_methods OBJC2_UNAVAILABLE; // 實例方法列表
struct objc_method_list *class_methods OBJC2_UNAVAILABLE; // 類方法列表
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; // 分類所實現(xiàn)的協(xié)議列表
}
- 運行時添加類方法列表茵典、實例方法列表、實現(xiàn)協(xié)議列表宾舅,沒有屬性列表统阿,使用@property添加的屬性,編譯期間不會報錯筹我,但是不會創(chuàng)建成員變量扶平。
- runtime通過objc_setAssociatedObject/objc_getAssociatedObject方法關(guān)聯(lián)在hash表中,但并沒有創(chuàng)建成員變量
- 如果分類方法和原類同名蔬蕊,因為分類是運行時被添加到類中的结澄,倒敘遍歷查找方法名時,會優(yōu)先調(diào)用分類方法,忽略原類方法麻献。
擴展:
添加私有屬性们妥,
@interface XXX ()
//編譯時期添加**私有**屬性、方法
//私有方法(如果不實現(xiàn)赎瑰,編譯時會報警,Method definition for 'XXX' not found)
@end
KVO
KVC
- KVC設(shè)值順序
-setKey > _key >_isKey > key > isKey
如果accessInstanceVariablesDirectly方法返回NO王悍,只會訪問setKey。 - KVC設(shè)值
getKey>key>isKey>Array的方法(countofKey)>NSSet方法
如果accessInstanceVariablesDirectly方法返回YES餐曼,會直接訪問_key>_isKey>key>isKey - 集合的處理
當(dāng)對容器類使用KVC時压储,valueForKey:將會被傳遞給容器中的每一個對象,返回一個集合 - 用途
動態(tài)取值
訪問私有變量
字典 模型轉(zhuǎn)換 結(jié)合runtime