2010-08-22 2 views
0

내 응용 프로그램 용 플러그인 시스템을 만들고 있습니다.하위 클래스에서 액세스 할 수없는 변수 만들기 및 재정의 할 수없는 메서드 만들기

@interface vertCon : NSObject { 
    NSProgressIndicator *progressBar; 
} 

/* May not be accessible by child classes */ 
@property (nonatomic, retain) IBOutlet NSProgressIndicator *progressBar; 

/* These two are used by child classes and may not be overridden */ 
- (void)updateProgessIndicator; // <-- epic spelling fail 
- (void)epicFailWithError:(NSError *)error; 

@end 

나는이 작업을 수행 할 수있는 방법

(진행률 표시 줄 당 vertCon의 하위 클래스의 하나의 객체가) : 현재 다음과 같습니다 vertCon라는 클래스와 프레임 워크를 사용? 감사.

답변

1

하위 클래스가 메서드를 재정의하지 못하게 할 수 없습니다. 또한 progressBar 속성을 선언하면 내부 NSProgressIndicator 참조에 대한 액세스도 차단할 수 없습니다.

다음과 같이 선언 된 속성을 삭제하고 @privaate로 바르를 선언하는 경우는 ProgressBar의 액세스를 방지 할 수 있습니다 : 당신이 속성으로 노출 된 바르를 필요로 함께 IBOutlet 선언을 주어진이 의심하지만

@interface vertCon : NSObject { 
@private 
    NSProgressIndicator *progressBar; 
} 
// etc, etc 
@end 

적어도 xib을 통해 그것을 설정할 수 있습니다.

이것은 실제로 의도를 문서화해야하는 경우입니다 (즉, 하위 클래스는 업데이트 및 epicFail 메소드를 사용하지만 무시하지 말아야합니다).

0

.m 파일에 메서드 서명을 개인 인터페이스에 넣을 수 있습니다. 이 경우 vertCon.m에 넣을 수 있습니다.

@interface vertCon (PrivateMethods) 
- (void)updateProgessIndicator; // <-- epic spelling fail 
- (void)epicFailWithError:(NSError *)error; 
@end 
+0

그는 자신의 서브 클래스가 그 메소드를 호출 할 수 있기를 바란다. 단지 서브 클래스가 그것을 오버라이드하지 않으므로, 내부적으로 그러한 메소드를 선언하는 것은별로 의미가 없다. – imaginaryboy

관련 문제