2013-04-20 45 views
0

是否有一種優雅的方式來獲取項目中使用的類的列表?項目中使用的類

我知道objc_getClassList(...)它獲取Objective-C中的所有類,我試圖避免使用class_conformsToProtocol來過濾類。

謝謝。

+0

那麼,你可以隨時查看構建中的.m文件列表。 – 2013-04-20 01:51:35

+0

通過「get」,你想查看項目中的類列表,還是想在運行時使用'NSArray',它包含項目中的所有類? – iluvcapra 2013-04-20 02:59:13

+0

我知道顯示項目中的類的類視圖。我怎樣才能使用代碼並且不用在我的類前加上任何東西?所以像objc_getClassList,但只拿起我的項目中的類。 – Komposr 2013-04-20 16:28:45

回答

2

在Xcode中,按Cmd的 + 打開符號導航並按下左下角的圖標C通過類進行過濾。

您可以通過按C圖標旁邊的文檔圖標進行更多篩選。結果將只包含您的項目中定義的類。下面是你必須點擊標記爲紅色的按鈕圖片:

Picture of Xcode symbol navigator filtering by classes and project

1

該代碼將搜索你的運行所有以指定,並返回其名稱(類型而不是編譯類前綴開頭類,當心):

NSArray *AllClassNamesInRuntimeWithPrefix(NSString *myClassPrefix) { 
    NSMutableArray *retObj = [NSMutableArray array]; 

    int nClasses = objc_getClassList(NULL, 0); 
    if (nClasses > 0) { 
     Class allClasses[] = malloc(nClasses * sizeof(Class)); 
     nClasses = objc_getClassList(allClasses, nClasses); 

     int i; 
     for (i = 0; i < nClasses; i++) { 
      NSString *thisClassName = NSStringFromClass(allClasses[i]); 
      if ([thisClassName hasPrefix:myClassPrefix]) { 
       [retObj appendObject:thisClassName]; 
      } 
     } 
     free(allClasses); 
    } 
    return [NSArray retObj]; 
} 

在運行時在搜索項目中的每一個類是有點苛求的,因爲運行時沒有一個格局「工程」,類可以在可執行文件存在或者在框架中,並且可以隨時加載。

+0

我知道顯示項目中的類的類視圖。我怎樣才能使用代碼並且不用在我的類前加上任何東西?所以像objc_getClassList,但只拿起我的項目中的類。 – Komposr 2013-04-20 16:29:03

+0

在運行時,您不能,除非您的應用程序可以使用sorce代碼,並且您可以通過它進行grep。你究竟想要做什麼? – iluvcapra 2013-04-20 16:55:36

相關問題