2011-05-12 41 views
3

學習iOS編程課程中的一些示例代碼(cs193p fall2010)我遇到了sbjson框架,它通過名爲SBJSON的類別擴展NSObject等。 但在+頭「的NSObject + SBJSON.h」記載爲:objC中的類別命名約定

@interface NSObject (NSObject_SBJSON) 

哪裏來SBJSON來NSObject_SBJSON的魔法映射而來? 我注意到xcode在下劃線之前接受任何字符串!?

但無處發現一個提示。

感謝名單 克勞斯

回答

6

本身並沒有真正的映射。 Objective-C類別用於向現有類添加其他方法,而不需要直接訪問該類的相應實現文件/細節。所以,當你聲明是這樣的:

@interface NSObject (NSObject_SBJSON) 

您是說您的分類方法,增加了對NSObject類(和它派生的任何類)。括號中的「NSObject_SBJSON」部分並不重要,並且可以是任何你喜歡的東西(只要它不與該對象類型的任何其他類別的名稱相沖突)。它甚至不需要包含「NSObject」,因此具有@interface NSObject (SBJSON)將同樣有效。

+0

所以,如果一個解決NSObject的+ SBJSON.h已經更改/實現兩個方法,應該作出獨特的類別或兩點地分居的呢? – 2013-01-07 21:36:38

2

類別沒有在你的代碼會參考他們的名字就像一個協議的意義命名。在這種情況下,類別名稱是Xcode(窮人)將文件名NSObject+SBJSON.h轉換爲類別名稱;出於某種原因,Xcode或Objective-C的編譯器不希望類別名稱中包含+

類別名稱被使用的唯一時間是匹配接口和實現方式。