2013-03-01 58 views
4

我試圖獲取運行時在應用程序中加載的類的列表。我不關心所有類,只是那些加載。我知道如何獲得所有類的列表,但通過遍歷它們來檢查它們是否處於加載的包中會導致隨機崩潰,並且看起來像是一種矯枉過正的方式。iOS:獲取包中的所有類或加載應用程序

我已經看到引用NSLoadedClasses,但我真的找不到任何東西,我不確定它適用於iOS(vs Mac)。什麼是正確的方式去得到這個?同樣,我在運行時需要它。

+0

我想知道*爲什麼*你想這樣做。 – 2013-03-01 03:46:27

回答

5

看起來像我想出來的。如果你需要做到這一點,這裏是如何做到這一點:

#import <objc/runtime.h> 
#import <dlfcn.h> 
#import <mach-o/ldsyms.h> 


unsigned int count; 
const char **classes; 
Dl_info info; 

dladdr(&_mh_execute_header, &info); 
classes = objc_copyClassNamesForImage(info.dli_fname, &count); 

for (int i = 0; i < count; i++) { 
    NSLog(@"Class name: %s", classes[i]); 
    Class class = NSClassFromString ([NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding]); 
    // Do something with class 

} 
相關問題