스탠포드 대학의 iPad 및 iPhone 응용 프로그램 개발 과정 비디오를보고 있습니다. 강사는 동영상에서 UI 개체를 구현 파일로 드래그하여 동작을 만들 수 있다고 말합니다. 그러나이 방법은 헤더 파일에 선언하지 않습니다. 이것은 .m 파일에 메소드를 구현하는 것이 좋지만 .h 파일에 선언하지 않는다는 것을 의미합니까?헤더 파일에 메서드를 선언 할 수 있습니까?
답변
당신이
목표 - C :-) "확인"을 정의하는 방법에 따라 달라 동적 방법을 사용합니다 ("private", "public"등) 지정자를 실제로 적용하지 않습니다. 따라서 은 헤더 파일의 모든 메서드를 선언 할 때이 필요하지 않습니다.
당신이 설득하지 않으면 형식 검사의 상당한 양을하기 때문에 컴파일러와 싸우게 될 것입니다. 그렇게하지 않으면 잃을 것입니다.
구현의 모든 메소드를 헤더 파일에 선언 할 필요는 없습니다. 그러나 헤더 파일에 없다면 다른 파일에서 리터럴 이름으로 파일을 참조 할 수 없으며 구현 파일에서 해당 파일을 "전달 참조"할 수도 없습니다.
(이것은 일반 C에서 서로 다른 것이 아니라 C++의 클래스의 방법이 다릅니다.)그것은 "OK"특정 상황에서, 헤더 예에서 메소드를 선언하지 않는 것. 예를 들어, ARC를 사용할 경우 컴파일러는 일반적으로 메소드 서명을 알아야 올바른 작업을 수행 할 수 있습니다. 그러나 기본적으로 그것이 의미하는 것은 메서드를 사용하는 곳이라면 호출하는 메서드에 대해 이미 알고 있어야한다는 것입니다.
인터페이스 빌더에 대해 이야기하고 있기 때문에 헤더와 구현 파일의 전체 컨텍스트를 "볼"수 있고 메소드가 존재한다는 것을 알기 때문에 모든 메소드에 대해 알 수 있다는 점에서 약간 다릅니다. 즉 위의 내 용어에서이 메소드는 사용되기 전에 정의되었습니다.
인터페이스 파일 (.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. "extern"키워드없이 헤더 파일에 변수를 선언 할 때 단점이 있습니까?
- 4. 개체를 선언 할 때 클래스의 메서드를 호출 할 수 있습니까?
- 5. 이러한 인스턴스 메서드를 어떻게 동적으로 선언 할 수 있습니까?
- 6. 알 수없는 형식의 인수가있는 메서드를 선언 할 수 있습니까?
- 7. C++에서 템플릿을 통해 메서드를 선언 할 수 있습니까?
- 8. 클래스 외부에 Objective-C 메서드를 선언 할 수 있습니까?
- 9. C#에서 매개 변수로 메서드를 선언 할 수 있습니까?
- 10. 구현 파일을 볼 수 없습니다. 헤더 파일에 선언 된 상수
- 11. 다른 프로그램에서 사용할 헤더 파일에 템플릿 만 선언 할 수 있습니까?
- 12. C/C++ 헤더 파일을 .pro 파일에 포함 할 수 있습니까?
- 13. 내 헤더 파일에 선언 된 정적 변수를 dealloc하는 방법은 무엇입니까?
- 14. 사용법에 따라 C++ 클래스를 두 번 선언 할 수 있습니까?
- 15. 헤더 파일에 2D 배열을 반환하는 함수를 선언 하시겠습니까?
- 16. (선언) 헤더에서 파일에 매개 변수 작성
- 17. appCode의 헤더 파일 (.h)에 메소드를 자동으로 선언 할 수 있습니까?
- 18. fstream 객체를 선언 할 수 없습니까? 포인터로 선언 할 수 있습니까?
- 19. C++ 헤더 파일에 오류가 있습니까?
- 20. C++, 헤더 파일에서 객체 선언
- 21. 다른 헤더 파일에 헤더 포함
- 22. 내 헤더 파일에있는 메서드를 선언하면
- 23. 헤더 파일에 선언 된 함수에서 구조체에 대한 포인터 사용
- 24. 메서드를 호출 할 수 없습니다.
- 25. objective-c 블록을 선언 할 때 인스턴스 메서드를 참조 할 수 있습니까
- 26. Java에서 기본 생성자를 선언 할 수 있습니까?
- 27. GSP 안에 함수를 선언 할 수 있습니까?
- 28. 선언 후에 문자열을 초기화 할 수 있습니까?
- 29. Ext.Component를 전역 변수로 선언 할 수 있습니까?
- 30. 배열 속성을 어떻게 선언 할 수 있습니까?
컴파일러의 동작은 Xcode 4.5에서 다소 변경된 것으로 보입니다. 저는 .h에서 선언하지 않은 많은 메소드를 가지고 있으며 컴파일러 에러가 없습니다. 그러나이 코드를 Xcode 4.2로 가져 가면 iOS 4.3과의 호환성을 확인할 수 있으므로 컴파일러에서 오류가 발생합니다. – JScarry
@JScarry - 컴파일러 플래그의 종류에 따라 다르지만 비슷한 동작이 나타났습니다. 그러나 Xcode 4.5는 .m에서'@ interface '의'()'버전의 사용을 추진하고 있으며 거기에 모든 내부 선언을 고수 할 수 있습니다. –