NSUserDefaults
솔루션은 값이 실제로 실제로 자연스럽게 끝나기 만하면 나쁜 것이 아닙니다. 확실히 forget about the singleton idea, 별도의 싱글 톤 클래스 또는 앱 델리게이트 일 수 있습니다.
컨트롤러 간의 커플 링을 줄이는 또 다른 가능성이 있습니다. 대신 개별 컨트롤러의 속성으로 필요한 설정을 속성으로 설정을 노출 것 하나 개 특정 클래스에 의존해야의 :
이
@interface Controller : UIViewController
@property(assign) NSUInteger logLevel; // a sample setting
@end
그러던 어느 별도의 클래스를 만드는 돌볼 것이라고 (의이 Factory
를 호출하자) 컨트롤러. 공장은 모든 설정을 기록하고 컨트롤러에 필요한 설정을 전달합니다. (공장 접근 방식을 보여주는 sample Xcode project on GitHub이 있지만 지금은이 특정 문제의 예는 포함되어 있지 않습니다.)
이 솔루션의 장점은 느슨한 결합입니다. 추가 객체는 필요 없습니다 (앱 대리인 , NSUserDefaults
인스턴스 또는 일부 Settings
클래스 인스턴스)를 사용하여 컨트롤러의 동작을 조정할 수 있습니다. 단점은보다 자세한 컨트롤러 API입니다. 이 방법을 선택할지 여부는 설정의 특성에 따라 다릅니다.
물론 하이브리드 솔루션을 제안 할 수도 있습니다. 모든 설정을 유지하고 좋은 API (더 이상 -objectForKey:
호출)를 사용하지 않고 Settings
클래스를 만들고 모든 컨트롤러에 Settings
개체에 대한 포인터를 공유하십시오. 싱글 톤이 필요하지 않습니다. 위의 링크 된 GitHub 샘플 코드를 참조하십시오. 이는 더 단단한 결합을 의미하지만 인터페이스에서 덜 자세한 정보를 의미합니다.
스토리 보드 기반 앱에서 어떻게 이러한 접근 방식을 유지 하시겠습니까? 저는 주 (state)를 잡고 컨트롤러를 통해 공유 할 중앙 집중식 수업을 갖고 싶습니다. 이 클래스를 컨트롤러에서 느리게 초기화하고 관심 세그먼트 (관심사) (다른 컨트롤러)를 통해 전달해야합니까? 그게 낫지 않을까? –
죄송합니다, 좋은 생각이 없습니다. 저는 여전히 UI 플로우를 손으로 연결합니다. 그 이유 중 하나는 프로세스를보다 잘 제어 할 수 있다는 것입니다. – zoul