2013-07-18 57 views
1

我正在學習objective-C,我知道我們可以使用擴展將一些私有成員添加到接口。爲什麼在擴展中有一個私有的?

但書上說,應該沒有在()

我讀了下面的代碼片段

@interface Tree(Private) 
- (void)blah:(int)num; 
@end 

我很奇怪,爲什麼有民辦的裏面()

+0

http://stackoverflow.com/questions/4685679/minutia-on-objective-c-categories-and-extensions –

回答

2

你可以把類別聲明中的任何名稱,通常表明該類別的用途。

所以在代碼中你的情況下,筆者想告訴大家,這些方法是供內部使用的類本身,而不是intented從其他類

0

在這種情況下被認爲是一類叫做,但是因爲它在.m文件中,所以它會有相同的效果。您還可以看到提示在Xcode:

enter image description here

身爲一個考慮中期像Tree(description),最後一個Tree()

0

這裏有兩個密切相關的概念:類類和類擴展。類別類別在括號內包含名稱,最常用於將方法添加到現有類或將方法組織到邏輯組中。類擴展擴展了類的內部實現(即用於定義私有屬性,方法等)。

更多細節可以在蘋果的dev的網站上找到:

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html

1

在您的示例中的聲明正是稱爲類別(不是擴展)。

您可以隨意添加儘可能多的類別任何給定的類(即使您無法訪問源代碼)。類別允許您向類中添加新方法,但不能添加新的Ivars或屬性。 [1]

每個類別都有一個名稱,這是括號內的位。不應該有兩個不同的類別爲同一個類具有相同的名稱。

當名稱爲空時,這稱爲分機號。擴展與類別有一些細微的差別:您可以將擴展名添加到ivars和屬性中,並且只能將它們用於您可以訪問源代碼的類。 [1]

通常,擴展(如在你的書的例子)在該.m文件的頂部聲明,和用於聲明的方法,實例變量和/或要被內,僅使用的屬性文件(通常由單個類組成)。

P.D.:如果您確實想通過類別添加新屬性,而不是通過擴展名,您實際上可以使用關聯對象[2] [3]來添加新屬性。

  1. http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html
  2. Defining a property in iOS class extension
  3. http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative-references/
相關問題