我在看斯坦福大學的iPad和iPhone應用程序開發課程視頻。教師在視頻中說,我們可以控制 - 將UI對象拖放到實現文件以創建一個動作。但是這樣該方法不會在頭文件中聲明。這是否意味着可以在.m文件中實現方法而不是在.h文件中聲明?我們不能在頭文件中聲明方法嗎?
6
A
回答
6
取決於你如何定義 「OK」 :-)
的Objective-C使用動態方法查找,並沒有真正強制訪問(「私人」,「公共」等)說明符。所以你不需要需要來在頭文件中聲明任何方法。
但是你最終會對編譯器發起衝擊,因爲它確實執行了大量的類型檢查,除非你說服它,否則你會失敗。
5
您不需要在頭文件中聲明實現中的所有方法。但是,如果不在頭文件中,顯然你不能在另一個文件中通過字面名稱引用它們,也不能在實現文件中「轉發引用」它們。
(請注意,這是不是從普通的C不同,但是是在C類的方法++不同。)
5
它的「OK」不聲明在標題是方法,在某些情況下。例如,如果使用ARC,那麼編譯器通常需要知道方法簽名,以便它可以做正確的事情。但基本上所有的意思是,無論你使用哪種方法,它都必須知道你所調用的方法。
由於你在談論Interface Builder,它有點不同,它會知道所有的方法,因爲它可以「看到」你的頭文件和實現文件的整個上下文,並知道方法的存在。即按照我上面的術語,該方法在使用之前已經被定義。
關於使用前限定,一般接受的方法是要麼:
定義在接口文件(.h)中的方法。例如爲:
MyClass.h
@interface MyClass : NSObject - (void)someMethod; @end
MyClass.m
@implementation MyClass - (void)someMethod { // do something } @end
定義在一個類延續類別的方法。例如:
MyClass.h
@interface MyClass : NSObject @end
MyClass.m
@interface MyClass() - (void)someMethod; @end @implementation MyClass - (void)someMethod { // do something } @end
相關問題
- 1. 在我的頭文件中聲明方法
- 2. 不能在主要方法中聲明方法嗎?
- 3. 我們可以在QML文件中聲明全局變量嗎?
- 4. 在其他程序使用的頭文件中,我只能聲明模板嗎?
- 5. CUDA C - 不能編譯在頭文件中聲明,並在.CU
- 6. 頭文件中的聲明
- 7. 在ARC下的頭文件中聲明IBOutlets的正確方法?
- 8. 在.h文件中聲明方法
- 9. 我們可以調用MainActivity中的同一類中聲明的方法,而不是在android studio中的onCreate或其他方法中聲明的方法嗎?
- 10. 在頭文件中聲明變量C++
- 11. 在頭文件中聲明變量
- 12. 問題而在頭文件中聲明
- 13. 我不能在我的cpp文件中聲明一個地圖
- 14. cobertura maven插件不能在接口中使用java8默認方法聲明嗎?
- 15. 爲什麼我們不能在togglestatus函數中聲明this.render?
- 16. 我不能在.h文件中聲明這個屬性,我可以在.m文件中嗎?
- 17. 聲明頭文件和cpp文件C++
- 18. 方法不能被聲明爲public
- 19. 爲什麼不需要在.h文件中聲明此方法?
- 20. VS2010可以告訴我哪個頭文件在聲明中拉?
- 21. 如何在我的頭文件中聲明一個常量對
- 22. extern聲明和頭文件在C
- 23. 頭文件中的變量聲明
- 24. 頭文件中的空類聲明?
- 25. 無法返回在頭文件中聲明的結構向量
- 26. 我們可以在app.config文件中聲明變量
- 27. createOperate方法不能被聲明爲靜態;靜態方法只能在靜態或頂級類型中聲明
- 28. 我不能在Groovy腳本中放置類聲明嗎?
- 29. 是否可以在appCode的頭文件(.h)中自動聲明一個方法?
- 30. 在頭文件中聲明枚舉,在源文件中不可見?
編譯器的行爲似乎在Xcode 4.5中有所變化。我有一堆我沒有在.h中聲明的方法,而且沒有編譯錯誤。但是,當我將此代碼放入Xcode 4.2中以便檢查與iOS 4.3的兼容性時,編譯器會引發錯誤。 – JScarry 2012-12-13 19:56:14
@JScarry - 我注意到類似的行爲,儘管它似乎隨某種編譯器標誌而變化。但Xcode 4。5在.m中推送'@ interface'的'()'版本,並且可以將所有內部聲明粘貼在那裏。 – 2012-12-13 19:59:05