我最終在.h和.m文件中都有這些,這是我的第一個Objective-C程序,所以我想澄清一下,這樣我就可以清理乾淨的東西了。#在.m或.h中導入語句在objective-c中?
回答
除非它影響接口定義,否則你應該把它放在.m文件中。
如果你只是使用類,使用前向聲明:
@class AClass;
@interface Bob : NSObject {
AClass* a;
}
如果實現的東西,然後將其導入:
#import "SomeProtocol.h"
@interface Bob : NSObject<SomeProtocol> {
}
這些類型的東西是真的「最佳實踐「而不是絕對必要的。 Objective C的#import
指令意味着你不能得到錯誤,因爲你多次包含一個文件,所以它不是在技術上有問題,但會增加編譯時間。
這是我遵循的規則:
- 如果你的頭文件,你只需要使用指針中要包括的頭文件中聲明類,那麼我只想用一個
class
句子上頭文件(.h
)和全定義文件(.m
)上的導入。 - 如果您需要使用包含的頭文件中某些東西的完整定義,那麼完整的導入將進入頭文件。
爲例子,認爲文件MyClass.m
,MyClass.h
和MyInclude.h
:
舉例,場景#1:
// MyClass.h
@class MyInclude;
@interface MyClass : NSObject {
MyInclude *myIncludeObj;
}
// MyClass.m
#import "MyClass.h"
#import "MyInclude.h"
的exaple,場景#2:
// MyClass.h
#import "MyInclude.h"
@interface MyClass : NSObject {
MyInclude myIncludeObj; // MyInclude could be a plain C structure
}
// MyClass.m
#import "MyClass.h"
它應該是@class,而不僅僅是class。 – 2010-12-01 15:27:32
最佳實踐將#import語句放在.m文件中。如果您需要訪問的頭文件中的一類,對於財產申報或函數參數,使用前聲明,就像這樣:
@class Cocos2DController;
@interface HoppersAppDelegate : NSObject <UIApplicationDelegate> {
Cocos2DController* controller;
}
正向聲明讓系統知道的類存在,儘管它尚未完全定義。使用這種模式,您可以保持標題精簡,並確保只導入特定類所需的標題,而不是通過應用程序鏈接#import。
對於您可能遇到的特定問題:如果在頭文件中包含#import語句,如果兩個類導入彼此的頭文件,就會冒#import循環的風險。
#import指令是對#include指令的改進,因爲它並不是盲目地複製文件,如果它已包含在內,它將不包含它。因此,您應該不會遇到#多次導入相同文件的問題。
就最佳實踐而言,恕我直言,最好儘量縮小範圍。因此,我建議將#imports放在你的實現文件(.m)中。如果您需要接口文件(.h)中的類定義,那麼您可以使用@class MyClass;
構造通知編譯器它將能夠在實現文件中找到相關頭文件。
希望這會有所幫助。
我只有一條規則:導入超類的.h文件的頂部,以及在.h文件中聲明的任何類的協議。這是因爲任何導入.h文件的文件都需要超類和協議的聲明。這也是爲什麼默認的Xcode模板在.h文件中有#import <UIKit/UIKit.h>
而不是.m文件。
對於一切(用於實例變量和方法參數如類型)時,向前聲明和把#進口的.m文件
另一種方法把這種爲:從來沒有使用前置聲明爲超和協議。
- 1. 導入到.h與.m
- 2. 在h或m文件中的Uiimagepickercontroller?
- 3. 澄清 - 在Eclipse中導入語句
- 4. 在iPhone庫中添加.h&.m文件
- 5. Objective-C - 在.h或.m中保留變量 - 有什麼區別?
- 6. nhibernate或在sql語句中
- 7. objective c - Break語句不在循環語句或switch語句中
- 8. Break語句不在循環語句或switch語句中?
- 9. 在另一個導入.h
- 10. 在CASE語句中插入
- 11. 如何在時間序列數據中將y%m%d%H格式轉換爲「%Y%m%d%H:%M:%S」
- 12. import modulname-Swift.h在.m中工作,但不在.h文件中
- 13. 符號導航器顯示h或m文件
- 14. Python導入語句
- 15. JDatePicker導入語句
- 16. Java導入語句
- 17. 導入Jar語句
- 18. Django導入語句
- 19. 在.h接口或.m文件中的擴展中聲明屬性?
- 20. 在where子句中使用if語句或case語句sql 2012
- 21. python導入語句語義
- 22. 如何導入語句Android Studio中
- 23. python中導入語句的列表
- 24. 方法中的Scala導入語句
- 25. Python中的本地導入語句
- 26. 在Ubuntu 12.04上的Jsch導入語句
- 27. Objective-C中的多個類定義在一個.h和.m中
- 28. 在IF語句或
- 29. Perl奇怪-M在'If'語句中標記
- 30. @ .h的@property不會顯示在* .m
可能出現[將#import放入.h或.m文件中?](http://stackoverflow.com/questions/2770243/do-you-put-import-s-in-h-或m文件) – 2016-09-15 14:11:45