2
수업이 있다고 가정 해 보겠습니다. 나는 다음과 같은 방법으로 속성을 선언하고 싶습니다 : 그것은 읽기 전용해야 프로그램 액세스 할 경우 클래스의 외부에서읽기 전용 콘센트입니까?
- ;
- 콘센트를 사용하여 을 Interface Builder에서 설정할 수 있어야합니다.
- (클래스 내부에서 쓰기 가능해야하지만 어떻게해야하는지 알 수 있습니다.)
은 "솔루션"나는 한 번 세터 작성하는 것입니다 내놓았다 :
- (void) setA: (ClassA *)a {
if (aHaveBeenSet)
return;
else {
// do what a setter have to do
aHaveBeenSet == YES;
}
}
을하지만, 그래서 여전히 (한 번만 효과 아니지만) 코드에서 호출 할 수있는이 세터 상당히 해결책은 아닙니다.
또 다른 방법은 함께 IBOutlet으로 바르를 표시하고이 같은 재산 readonly
을하는 것입니다 :
@interface MyClass : NSObject {
IBOutlet ClassA *a;
}
@property (readonly) ClassA *a;
@end
그러나 this answer에 따르면,이 빈약 한 스타일의 메모리 관리가 불분명합니다.
아이디어가 있으십니까?
가 [목적-C 프로그래밍 언어를 참조하십시오 그래서 당신이 같은 읽기 전용 공용 속성을 선언하지만하는 .m 파일에 "개인"세터를 작성할 수 의미 ] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html%23//apple_ref/doc/uid/TP30001163-CH20-SW2). – ughoavgfhw
이것은 찌르기 로딩 코드가'if ([obj respondsToSelector : @selector (setA :)]) [obj setA : a]'와 같은 것을 할 것이라는 의미입니까? 그렇다면 setter가 공개적으로 선언되지는 않았지만 조건이 '예'로 평가됩니까? – adubr
첫 번째 질문 : 확실하지는 않지만 나는 그렇다고 생각합니다. 두 번째 질문 : 분명히 그렇습니다. –