1.SEL的基本特點
在內(nèi)存中每個類的方法都存儲在類對象中
每個方法都有一個與之對應(yīng)的SEL類型的數(shù)據(jù)
根據(jù)一個SEL數(shù)據(jù)就可以找到對應(yīng)的方法地址剿涮,進(jìn)而調(diào)用方法
SEL類型的定義:? typedef struct objc_selector * SEL
2.SEL對象的創(chuàng)建
SEL s1 = @selector(test1); // 將test1方法包裝成SEL對象
SEL s2 = NSSelectorFromString(@"test1"); // 將一個字符串方法轉(zhuǎn)換成為SEL對象
3.SEL和IMP的區(qū)別
SEL是一個方法的編號 ? IMP是函數(shù)指針主经,直接獲取函數(shù)的內(nèi)存地址
兩者的關(guān)系在于在類對象的數(shù)據(jù)結(jié)構(gòu)中,其存儲的實例方法列表(dispatch table)就是用SEL和IMP作為映射關(guān)系存在的(其實SEL為整形成畦,其與實例方法有一個表的對應(yīng)關(guān)系距芬,在映射到IMP)。通過SEL和IMP的關(guān)系循帐,可以通過runtime動態(tài)修改其對應(yīng)關(guān)系框仔,進(jìn)一步修改方法的實現(xiàn)。
4.關(guān)于iOS類的繼承關(guān)系圖
圖中包括三種對象拄养,實例對象离斩,類對象银舱,元類對象
所有的對象均繼承于自己的父類,NSObjec 是根類 其繼承關(guān)系為nil
實例對象的ISA指針指向類對象跛梗,類對象的ISA指針指向元類寻馏,元類的ISA指針均指向根源類,根源類的ISA指針也指向自己
類對象存儲 普通成員變量與普通成員方法(-開頭的方法)
元類對象 ?存儲類的static類成員變量與static類成員方法(+開頭的方法)核偿,在類方法中self關(guān)鍵字代表的是這個類诚欠,以self點語法是獲取不到其屬性的。