내 클래스에서 상수이어야하는 NSString이 있습니다. 다음 코드를 사용하여이 작업을 수행했습니다.클래스 수준에서 정적 NSString 초기화
@interface DefinitionViewController()
@end
static NSString *preamble;
@implementation DefinitionViewController {
}
+(void)initialize {
if (self == [DefinitionViewController class]) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"preamble" ofType:@"html"];
preamble = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding
error:nil];
}
}
잘 작동하는 것 같습니다. initialize
안에있는 파일을 사용하는 것에 대해 걱정이됩니다. 동일한 목표 (정적 문자열 공유)를 수행하는보다 적절한 방법이 있습니까? 이 코드를 내 코드 안에 묻을 수 있지만 다소 큰 문자열을 외부 파일로 유지하는 것이 훨씬 쉬웠습니다.
어떤 조언을 주셔서 감사합니다.
그리고 실제로, 내 대답을 참조하십시오 : http://stackoverflow.com/a/21324237/341994 – matt
경우 나는 문서를 올바르게 이해했다.'초기화 '를 가진 경쟁 조건이 없다. 그래서 싱글 톤은 정말로 과잉이다. 또한 앱 번들에서 읽은 파일이 교착 상태를 일으키지 않는다고 가정합니다. 감사. – Bill
@Bill "+ 초기화"메소드는 "무거운 짐을 싣기"위해 사용되어서는 안됩니다. 예기치 않은 클래스 초기화 순서 종속성에서 나중에 리팩토링하는 데 어려움을 겪지 못하게하는 느린 시작 시간에 이르기까지 여러 가지 문제가 발생할 수 있습니다. 이 경우 * 아마 * 상처를 입지 않을 것이지만, 싱글 톤 패턴을 사용하라는 제안은 확실히 더 나은 선택입니다 (최적화 단계에서 여전히 문제가 될 수있는 게으른 초기화의 형태입니다). – bbum