YYModel細(xì)讀(待續(xù)...)

YYEncodingType方法的作用,怎么知道這些數(shù)據(jù)怎么取,由于是獲取類型編碼,獲取也是看ivar_getTypeEncoding的quick help(xcode的提示):

  1. const一類的限定符
  2. int、NSArray、struct等數(shù)據(jù)類型
將以上兩種編碼字符串轉(zhuǎn)換為自己所定義的枚舉類型,方法自己轉(zhuǎn)換。除了上面兩種,在屬性中,還有retain,nonatomic,weak等屬性特征編碼,總共三大類型編碼。

YYClassIvarInfo的封裝(即實(shí)例變量Ivar的封裝,class_copyIvarList獲取):

  1. 實(shí)例變量名字(ivar_getName獲?。?/li>
  2. 偏移量(ivar_getOffset獲?。?/li>
  3. 原始類型編碼
  4. 自己定義的類型編碼(枚舉類型,通過YYEncodingType獲取)

YYClassMethodInfo的封裝(即方法Method的封裝,class_copyMethodList獲取)

  1. 方法名(method_getName)
  2. 實(shí)現(xiàn)(method_getImplementation)
  3. 選擇器(sel_getName根據(jù)方法名獲取)
  4. 原始方法編碼(method_getTypeEncoding)
  5. 返回原始類型編碼字符串(method_copyReturnType)
  6. 參數(shù)原始類型編碼數(shù)組(method_getNumberOfArguments、method_copyArgumentType)
    根據(jù)method_copyArgumentType獲取的幾個(gè)參數(shù),在Objective-C中,消息是通過objc_msgSend()這個(gè)runtime方法及相近的方法來實(shí)現(xiàn)的。這個(gè)方法需要一個(gè)target,selector,還有一些參數(shù)。理論上來說,編譯器只是把消息分發(fā)變成objc_msgSend來執(zhí)行。


    image.png

    所以上面自然就是objc_msgSend(self,@selector(setSSLPinningMode:),Q類型的參數(shù)),所以setSSLPinningMode:是有三個(gè)參數(shù),而不是一個(gè)。

YYClassPropertyInfo的封裝(即屬性objc_property_t的封裝,class_copyPropertyList獲取)

  1. 屬性名(property_getName)
  2. 原始類型編碼(property_copyAttributeList獲取特征數(shù)組,name為T對應(yīng)的value就是類型編碼)
  3. 所屬類Class(根據(jù)特征數(shù)組name為T對應(yīng)的value就是類型編碼判斷,如果是對象,則獲取Class,否則為空)
  4. 屬性對應(yīng)的變量名(property_copyAttributeList獲取特征數(shù)組,name為V對應(yīng)的value就是變量名,需要判斷value是否為空,暫時(shí)沒理解為什么)
  5. 自己定義的類型編碼(這是一個(gè)枚舉類型,property_copyAttributeList特征數(shù)組能獲取相應(yīng)的類型編碼、變量名、屬性特征編碼,這里取的是類型編碼和屬性特征編碼
  6. 獲取和讀取選擇器(通過特征數(shù)組的其中一個(gè)特征結(jié)構(gòu)體獲取,有value則獲取)
    property_copyAttributeList獲取的特征數(shù)組attrs的一個(gè)示例:


    image.png

    T就是類型編碼,&就是retain屬性特征,N就是nonatomic屬性特征,V就是變了名

Property(retain,nonatomic)NSString *url;

YYClassInfo的封裝(通過Class獲取)

  1. 父類(class_getSuperclass)
  2. 是否元組(class_isMetaClass)
  3. 類的元組類(objc_getMetaClass、class_getName)
  4. 屬性信息數(shù)組(YYClassIvarInfo的封裝)
  5. 方法信息數(shù)組(YYClassMethodInfo的封裝)
  6. 實(shí)例變量數(shù)組(YYClassPropertyInfo的封裝)
  7. 細(xì)說classInfoWithClass
  • classInfoWithClass做了性能優(yōu)化,如果不優(yōu)化的話,其實(shí)initWithClass已經(jīng)足夠了。
static dispatch_semaphore_t lock;
lock = dispatch_semaphore_create(1);
dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
dispatch_semaphore_signal(lock);

dispatch_semaphore_signal會(huì)讓信號(hào)量加1
dispatch_semaphore_wait會(huì)讓信號(hào)量減1,當(dāng)信號(hào)總量少于0的時(shí)候就會(huì)一直等待,否則就可以正常的執(zhí)行

待續(xù)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,084評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評論 19 139
  • 我們常常會(huì)聽說 Objective-C 是一門動(dòng)態(tài)語言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,351評論 0 7
  • Objective-C語言是一門動(dòng)態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事放到了運(yùn)行時(shí)來處理。這種動(dòng)態(tài)語言的...
    有一種再見叫青春閱讀 682評論 0 3
  • “別的信也都是這樣,幾乎都很感謝我的回答。這當(dāng)然是值得欣慰的事情,不過從我讀到的內(nèi)容來看,我的回答之所以發(fā)揮...
    Coco隨手筆閱讀 228評論 0 0

友情鏈接更多精彩內(nèi)容