문제

AA-Plot 차트의 샘플 코드를 다운로드했습니다.

.h 파일 중 하나 :

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
@private
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@end

.M 파일에서 인터페이스가 다시 선언됩니까?

@interface MainViewController()

@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;

@end

샘플 프로젝트의 기본보기 컨트롤러 코드에서 위 코드를 찾았습니다.

다음을 수행하면 위의 코드와 아래 코드의 차이점은 무엇입니까??

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;
@end
도움이 되었습니까?

해결책

.m 파일에서보고있는 "추가"물건은 범주. 원래 프로그래머는 아마도 그의 클래스의 공개 인터페이스 (.H 파일)에서 구현 세부 정보를 숨기고 싶었을 것입니다. ()) 그의 구현 파일에 추가합니다. 이 특정한 경우, 그는 외부 코드가 얻을 수 없도록 개인 변수에 대한 액세서를 숨기고 있습니다.

두 번째 코드 스 니펫에 표시된 변경 사항은 모든 것을 단일 클래스 인터페이스에 넣습니다. 이러한 변경 사항은 런타임 작동에 전혀 영향을 미치지 않아야합니다. (당신이 꺼내는 것을 제외하고 @private, 의미 론적 차이는 범주 메소드가 런타임에 클래스에 추가된다는 것입니다.

카테고리는 인스턴스 변수가 아닌 메소드 만 추가 할 수 있으므로 원래 코드는 원본에 모든 인스턴스 변수 선언 ( '비밀 액세서가있는 사람조차도)이있는 이유입니다. @interface 차단하다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top