我正在學習objective-C,我知道我們可以使用擴展將一些私有成員添加到接口。爲什麼在擴展中有一個私有的?
但書上說,應該沒有在()
我讀了下面的代碼片段
@interface Tree(Private)
- (void)blah:(int)num;
@end
我很奇怪,爲什麼有民辦的裏面()
我正在學習objective-C,我知道我們可以使用擴展將一些私有成員添加到接口。爲什麼在擴展中有一個私有的?
但書上說,應該沒有在()
我讀了下面的代碼片段
@interface Tree(Private)
- (void)blah:(int)num;
@end
我很奇怪,爲什麼有民辦的裏面()
你可以把類別聲明中的任何名稱,通常表明該類別的用途。
所以在代碼中你的情況下,筆者想告訴大家,這些方法是供內部使用的類本身,而不是intented從其他類
在這種情況下被認爲是一類叫做,但是因爲它在.m文件中,所以它會有相同的效果。您還可以看到提示在Xcode:
身爲一個考慮中期像Tree(description)
,最後一個Tree()
這裏有兩個密切相關的概念:類類和類擴展。類別類別在括號內包含名稱,最常用於將方法添加到現有類或將方法組織到邏輯組中。類擴展擴展了類的內部實現(即用於定義私有屬性,方法等)。
更多細節可以在蘋果的dev的網站上找到:
在您的示例中的聲明正是稱爲類別(不是擴展)。
您可以隨意添加儘可能多的類別任何給定的類(即使您無法訪問源代碼)。類別允許您向類中添加新方法,但不能添加新的Ivars或屬性。 [1]
每個類別都有一個名稱,這是括號內的位。不應該有兩個不同的類別爲同一個類具有相同的名稱。
當名稱爲空時,這稱爲分機號。擴展與類別有一些細微的差別:您可以將擴展名添加到ivars和屬性中,並且只能將它們用於您可以訪問源代碼的類。 [1]
通常,擴展(如在你的書的例子)在該.m
文件的頂部聲明,和用於聲明的方法,實例變量和/或要被內,僅使用的屬性文件(通常由單個類組成)。
P.D.:如果您確實想通過類別添加新屬性,而不是通過擴展名,您實際上可以使用關聯對象[2] [3]來添加新屬性。
http://stackoverflow.com/questions/4685679/minutia-on-objective-c-categories-and-extensions –