爲什麼我們在xcode中的viewcontroller的實現和頭文件中都有'@interface ViewController'行?視圖控制器的實現和頭文件中'@interface ViewController'的原因
6
A
回答
7
這是關於@interface
的內容的可見性。當它包含在頭文件中時,它可用於其他類查看它們何時導入頭文件。當它包含在實現文件中時,內容僅可用於該實現文件。典型地,當它在實現文件中被聲明時,它通過類擴展(即@interface ClassName()
,()
表示類擴展/匿名類別)來完成,儘管如果需要可以使用命名的類別。
爲什麼這樣做有幾個原因。主要的是定義私有實例變量或屬性。您不希望這些內容暴露給導入頭文件的每個人,但您需要一個地方來存儲內部信息。例如,這將允許m_isActive
將只執行中使用:
@interface Class() {
BOOL m_isActive;
}
您還可以覆蓋在頭文件中聲明只讀屬性,從而使實現文件使用圓點符號時,有它readwrite
訪問。例如:
頁眉:
@interface Class
@property (nonatomic, readonly) NSString* name;
@end
實現:
@interface Class()
@property (nonatomic) NSString* name;
@end
@implementation Class
...
self.name = @"WDUK"; // This is allowed, as the class extension has overridden the readonly attribute via a redeclaration of the property
...
@end
另一種流行的用途是私下聲明你遵循特定的協議,這是一個實現細節並不需要是暴露在公共頭文件中。例如,當實現使用一個需要它作爲委託的對象時,並且您不想使用在該類之外不使用的協議來污染頭文件。
其他用途(在最近的LLVM/Clang改進中一直處於黑暗中)是定義私有方法。這不再是必需的,因爲編譯器會查找未在相應頭文件中聲明的方法,並且假定它們對於類是私有的並且自己聲明它們。
的重要組成部分,從所有這一切拿地,是頭文件(除非通過@private
或@protected
定義有實例變量)內內@interface
什麼是公開的,並且實現文件內的任何本質上是私有的。
2
頭文件中的一個定義了公共接口。
執行文件中的一個是類擴展,它擴展了公共接口和任何私有實現細節。
相關問題
- 1. 駁回視圖控制器和呈現另一個的viewController
- 2. 導航控制器視圖作爲ViewController中的子視圖
- 3. 模型視圖控制器中tableview的最佳實現
- 4. 在視圖控制器中實現導航控制器
- 5. 如何從當前視圖控制器的實現文件加載另一個視圖控制器?
- 6. viewController是'視圖'還是'控制器'?
- 7. viewController在其他視圖控制器
- 8. 如何給呈現的視圖控制器的當前實例?
- 9. 滑動視圖和視圖控制器
- 10. 從子視圖控制器呈現主視圖控制器
- 11. 從自定義UIView(xib文件)呈現視圖控制器
- 12. 在集合視圖的容器視圖中呈現視圖控制器didSelectItemAtIndexPath swift
- 13. 當前新視圖控制器和無形解僱呈現視圖控制器
- 14. 視圖和視圖控制器
- 15. MVC視圖和控制器通信的實現。 (Java)
- 16. 呈現一個沒有nib文件的視圖控制器
- 17. 視圖控制器的條件加載卡住在初始ViewController
- 18. 在視圖控制器中共享NSURLsession委託實現
- 19. 把視圖控制器中的TabBar的ViewController
- 20. 不完整的實現視圖控制器
- 21. 觀察視圖中的控制器屬性和反應,因此
- 22. 查看控制器的視圖控制器和方向iOS
- 23. 從所呈現的視圖控制器訪問呈現視圖控制器?
- 24. 如何從另一個視圖控制器呈現視圖控制器
- 25. 膨化現有視圖控制器和裝載父視圖控制器
- 26. 呈現視圖控制器
- 27. 將視圖推送到tab控制器中的viewcontroller
- 28. Xcode6/Swift - 如何在多個視圖控制器中實現iAdBannerView?
- 29. 從appdelegate呈現視圖控制器
- 30. 哪個視圖控制器正在實例化目標視圖控制器?
類擴展的另一個用途是私下聲明該類符合一個或多個協議。 – rmaddy 2013-04-07 02:18:03
打我一拳,已經加入了!非常好的一點,但。 – WDUK 2013-04-07 02:21:37
你們談論的這些協議是什麼? – 2013-04-07 02:29:40