2012-06-20 6 views
1

온라인 스탠포드 코스에서 객체 지향 프로그래밍을 배우고 있는데 여기에는 선언과 관련하여 확실하지 않은 부분이 있습니다. 난 당신이 헤더에 프로토 타입을 선언하고 구현 파일에 코드를 작성해야한다고 생각했지만 교수는 헤더 파일에 선언 프로토 타입이없는 구현에서 메소드를 작성했습니다. 어떻게해야합니까?헤더 및 구현의 프로토 타입 선언

또한 개인과 공공의 차이를 분명히하고 프로토 타입이없는 방법이 공개 또는 비공개인지 여부를 알려주시겠습니까? 프로토 타입이없는 메소드는 수퍼 클래스의 메소드가 아닙니다.

답변

2

이는 클래스 구현 자체 외부에서 사용되지 않는 메소드를 선언하는 데 매우 합법적 인 방법입니다.

컴파일러는 사용 된 메소드보다 선행하는 한 구현 파일에서 메소드를 찾습니다. 그러나 새로운 LLVM 컴파일러는 메소드가 임의의 순서로 선언되고 주어진 파일에서 참조 될 수 있기 때문에 항상 그런 것은 아닙니다. 당신이 downvote 너무 친절하시기 바랍니다

//In the Header File, MyClass.h 
@interface MyClass : NSObject 
@end 

//in the implementation file, MyClass.m 
//Method Decls inside a Private Category 
@interface MyClass (_Private) 
    - (void)doSomething; 
@end 

//As a class extension (new to LLVM compiler) 
@interface MyClass() 
    - (void)doSomething; 
@end 

@implementation MyClass 
//You can also simply implement a method with no formal "forward" declaration 
//in this case you must declare the method before you use it, unless you're using the 
//latest LLVM Compiler (See the WWDC Session on Modern Objective C) 
- (void)doSomething { 
} 

- (void)foo { 
    [self doSomething]; 
} 
@end 
2

헤더 파일에이 메서드를 작성하면 다른 클래스/개체에 대해 공용이며 액세스 할 수 있습니다. 헤더 파일에 선언하지 않으면 메서드는 클래스에서 내부적으로 액세스 할 수 있지만 다른 클래스에서는이 메서드를 사용할 수 없다는 의미의 private 메서드입니다.

+0

는 이유를 추가 :

는 구현 파일 내부의 방법을 선언하는 다른 스타일의 몇 가지가 있습니다. – Pfitz