1. 程式人生 > >iOS - 知識梳理 (雜集)

iOS - 知識梳理 (雜集)

因為有些知識點比較小,不想浪費篇幅單獨弄一篇部落格,所以把一些小的知識點記錄在一篇裡面,方便查閱。

1.Category 會覆蓋掉原來類裡的方法嗎?

答案是會的,將category生成對應的cpp檔案會看到它的結構,

struct _category_t {
const char *name;
struct _class_t *cls;
const struct _method_list_t *instance_methods;
const struct _method_list_t *class_methods;
const struct _protocol_list_t *protocols;
const struct _prop_list_t *properties;
};

 例項方法列表,類方法列表,協議列表,屬性列表,但是沒有例項變數列表。即使添加了屬性也只是添加了setter和 getter方法。

系統在執行時將category對應的例項方法、類方法等都插入到了原來類或元類的方法列表中去了,而且是放在前邊,所以通過isa指標去查詢方法的話,優先是呼叫category中的。所以是category會覆蓋掉原來類實現的方法。