2016-12-17 64 views
2

蘋果的解釋是IOS是什麼objc_getClass和objc_lookUpClass的區別

objc_getClass是在objc_lookUpClass不同,如果類沒有註冊,objc_getClass調用類的處理程序回調,然後檢查第二次,看是否該課程已註冊。 objc_lookUpClass不調用類處理程序回調。

但我不太瞭解「類處理程序回調」。你能詳細解釋一下嗎?我希望有些代碼能夠展示它們的差異,非常感謝!

回答

0

他們拖拽的方法說明在蘋果的文檔中不明確。但運行代碼在Apple Opensource中運行。 根據運行時的oppensource,我發現他們如下二方法FPGA實現:

Class objc_getClass(const char *aClassName) 
{ 
    if (!aClassName) return Nil; 

    // NO unconnected, YES class handler 
    return look_up_class(aClassName, NO, YES); 
} 

Class objc_lookUpClass(const char *aClassName) 
{ 
    if (!aClassName) return Nil; 

    // NO unconnected, NO class handler 
    return look_up_class(aClassName, NO, NO); 
} 

他們拖方法都調用了look_up_class方法,在最後一個參數不同。在look_up_class內部,最後一個參數不使用。因此,總之,我認爲objc_getClassobjc_lookUpClass都是一樣的。

Class 
look_up_class(const char *name, 
       bool includeUnconnected __attribute__((unused)), 
       bool includeClassHandler __attribute__((unused))) 
{ 
    if (!name) return nil; 

    Class result; 
    bool unrealized; 
    { 
     rwlock_reader_t lock(runtimeLock); 
     result = getClass(name); 
     unrealized = result && !result->isRealized(); 
    } 
    if (unrealized) { 
     rwlock_writer_t lock(runtimeLock); 
     realizeClass(result); 
    } 
    return result; 
} 
相關問題