NSObject의 헤더 파일을 살펴 봤는데 싱글 톤 클래스를 만들고 있습니다. 문제는 NSNotifications를 관찰하고 질문 할 때 현재 상태를보고함으로써 애플리케이션의 상태를 유지하기 때문에 기본적으로 애플리케이션의 시작부터로드해야한다는 것입니다.+ (void) load가있는 Singleton Safety
이 문제에 대한 해결책은 NSObject에서 +(void)load
메서드를 사용하는 것입니다. 클래스가 메모리에로드 될 때, 나는 load 메소드를 오버라이드하여 그 단계에서 싱글 톤을 할당하려고했습니다.
로드 방법 중에 [[*class* alloc] init]
을 호출해도 안전한지 확실하지 않습니다. 나는 그것이 문서화되지 않는 한 일반적으로 가정 할 것이지만,이 항목의 중요성과 앱이 시작될 때마다이 값을로드한다는 사실을 고려할 때 누구나 이것이 안전한지에 대한 지식이 있다는 것을 알고 싶습니다. 안심을 위해서 말입니다.
도움을 주셔서 감사합니다.
예, 트릭을 수행합니다. 여기서 중요한 점은 + (void) initialize는 각 클래스 (!)의 프로그램 초기화시 한 번만 호출된다는 것입니다. 각 클래스에 대해 [슈퍼 초기화]를 호출 할 필요가 없음을 의미합니다. 반면 하위 클래스의 코더가 하위 클래스 내 [super initialize]를 호출하기 때문에 두 번 호출 될 때 오류 또는 메모리 누수가 발생하지 않는 방식으로 코드 + 초기화가 저장됩니다 + 메소드 초기화. 따라서 당신은 하나의 유일한 인스턴스를 생성하기 위해 그것을 사용할 수 있어야합니다. 반면에 + init이 아마도 더 좋습니다. –
+ (void)를 초기화 할 때 발생하는 문제는 Apple의 문서에서 설명합니다. "런타임은 클래스의 바로 전에 한 번 프로그램의 각 클래스에 초기화를 보내거나이 클래스에서 상속 한 클래스는 (따라서 클래스가 사용되지 않으면이 메소드를 호출 할 수 없습니다.) "- 사용자가로드 업시이 메소드를 호출 할 수없는 정적 라이브러리를 개발 중입니다. 객체는 사용 여부와 상관없이 처음부터 상태를 모니터하기 위해 객체 자체만으로 싱글 톤을 생성해야합니다. 이것이 + (void) 초기화를 피한 이유입니다. –