나는 내 .h 및 .m 파일 모두에서이 작업을 끝내 었으며 이것은 첫 번째 Objective-C 프로그램이므로 약간의 정리를 원한다.objective-c에서 .m 또는 .h의 #import 문은?
답변
인터페이스 정의에 영향을주지 않으면 .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이어야합니다. –
모범 사례 .m 파일에 #import 문을 넣는 것입니다. 당신은 속성 선언 또는 함수 매개 변수에 대한 헤더 파일 내부의 클래스에 대한 액세스를해야하는 경우, 다음과 같이 앞으로 선언을 사용
@class Cocos2DController;
@interface HoppersAppDelegate : NSObject <UIApplicationDelegate> {
Cocos2DController* controller;
}
는 앞으로 선언이 시스템을 할 수있는 클래스가 존재하는 것을 알고, 그것이 비록 아직 완전히 정의되지 않았다. 이 패턴을 사용하면 헤더를 간결하게 유지하고 특정 클래스에 대해 필요한 헤더 만 가져 오도록 보장하고 응용 프로그램을 통해 # 가져 오기를 연결하는 것은 아닙니다.
특정 문제가 발생할 수 있습니다. 헤더 파일에 # import 문을 포함하면 두 클래스가 서로의 헤더 파일을 가져 오면 #import 루프가 발생할 위험이 있습니다.
#import 지시문은 맹목적으로 파일을 제자리에 복사하는 대신 #include 지시문을 개선 한 것으로, 이미 포함되어 있으면 포함하지 않습니다. 따라서 # 동일한 파일을 여러 번 가져 오는 데 문제가 발생하지 않아야합니다.
가능한 한 범위를 가능한 좁게 유지하는 것이 가장 좋습니다. 따라서 #imports를 구현 파일 (.m)에 넣는 것이 좋습니다. 인터페이스 파일 (.h)에 클래스 정의가 필요한 경우
@class MyClass;
구문을 사용하여 구현 파일에서 관련 헤더를 찾을 수 있음을 컴파일러에 알립니다.
희망이 도움이됩니다.
하나의 규칙 만 있습니다. .h 파일에서 선언 한 모든 클래스의 수퍼 클래스와 프로토콜에 대한 .h 파일의 맨 위에서 가져 오기. 이는 .h 파일을 가져 오는 모든 파일에도 수퍼 클래스 및 프로토콜에 대한 선언이 필요하기 때문입니다. 이것은 또한 기본 Xcode 템플릿이 .m 파일이 아니라 .h 파일에 #import <UIKit/UIKit.h>
인 이유이기도합니다.
(인스턴스 변수와 메소드 매개 변수에 사용되는 예를 들어 유형), 전방 선언을 사용하고하는 .m 파일
에 넣고하는 또 다른 방법을 # import를 넣어 것은 : 는 슈퍼 클래스에 대한 선언을 앞으로 사용하지 않습니다 및 프로토콜.
- 1. 이 파이썬의`import` 문은 무엇을 의미합니까?
- 2. ObjectiveC에서 ECMAscript
- 3. 기능은 내 .H의 범위
- 4. Perl에서 %^H의 용도는 무엇입니까?
- 5. ObjectiveC에서 .doc (MSWord) 파일 읽기?
- 6. .h 또는 .m 파일에 #import를 넣으시겠습니까?
- 7. PHP M 또는 F (남성 또는 여성)
- 8. EF4, Npgsql, M : M 관계, "메서드 또는 연산이 구현되지 않았습니다." :/
- 9. import module == from module import *?
- 10. 클래스 파일을 더 크게 만들 수 있습니까? import java.awt. *, 또는 낱장 또는 단일 import 문?
- 11. 헤더 파일 또는 구현 파일의 #import
- 12. App :: import ('Model', ...) 또는 ClassRegistry (...)를 사용해야합니까?
- 13. .h의 포인터가 자동으로 NULL로 설정됩니까?
- 14. Javascript/JQuery에서 $ H의 의미는 무엇입니까?
- 15. Objective-C에서 #import 할 곳
- 16. ObjectiveC에서 수퍼 클래스의 메서드를 호출하는 타이밍이 중요합니까?
- 17. foreach 문은
- 18. UPDATE 문은
- 19. SQL 문은
- 20. 인쇄 문은
- 21. 문은 세미콜론
- 22. 라텍스 : \ frontmatter의 m 페이지 n, \ mainmatter의 m 페이지 m
- 23. ObjectiveC에서 다른 클래스의 클래스 변수를 어떻게 간단히 변경할 수 있습니까?
- 24. 이 IF 문은 어떻게 작동합니까?
- 25. ObjectiveC에서 iOS 대 % d의 다른 처리
- 26. Emacs에서 .h의 프로토 타입 함수를 자동으로 삽입
- 27. CSS @import 모범 사례
- 28. 실행 SQL 문은
- 29. mysql codeigniter 활성 레코드 m : m 삭제
- 30. 유창한 nhibernate m-to-m with column
[가져 오기 파일을 .h 또는 .m 파일에 넣으시겠습니까?] (http://stackoverflow.com/questions/2770243/do-you-put-import-s-in-h- or-m-files) –