2012-02-09 4 views
5

내 애플 리케이션의 대부분에 대해 모든 로직을 클래스에 배치 했으므로 각 ViewController는 클래스를 참조하거나 객체 자체를 생성/릴리스합니다.대부분의 로직과 모델을 appDelegate에 배치해도됩니까?

저는 IOS에서 책을 읽기 시작했습니다. 저자는 appDelegate에 앱 논리를 넣는 것처럼 보이고 viewcontroller는 실제 작업을 수행하는 appDelegate 메소드에 작업을 전달합니다.

저자가 간단한 예제이거나 배워야 할 것이기 때문에 작성자가이 작업을 수행하고 있습니까? 내 응용 프로그램에서 시작해야할까요?

+0

여기 LavaSlider의 대답을 좋아합니다. http://stackoverflow.com/questions/8421138/importing-appdelegate – Rhubarb

답변

12

첫째, 애플리케이션 대리인 애플리케이션의 위양 What describes the Application Delegate best? How does it fit into the whole concept?

참조. 다른 곳을 알지 못하는 모든 것을 담을 곳이 아닙니다. 그것은 세계를위한 저장 장소가 아닙니다. UIApplication 개체의 대리자입니다. 따라서 응용 프로그램을 시작하고, 종료하고, 백그라운드에서 전환하는 것과 관련된 코드를 배치하는 올바른 위치입니다. 응용 프로그램이 OS에 어떻게 적용되는지와 관련이 있습니다.

앱 위임은 컨트롤러이므로 데이터를 보유하지 않아야합니다. 데이터가 모델에 저장됩니다. 앱 델리게이트는 시작할 때 모델을 만들어 다른 컨트롤러에 넘겨 줄 수는 있지만 모델에 대한 API는 아닙니다. 모델은 종종 앱 델리게이트가 만드는 대신 싱글 톤입니다. 두 방법 모두 장점이 있습니다.

간단한 예제의 경우 약간의 코드가 필요하기 때문에 대부분의 예제 코드는 모델 코드를 응용 프로그램 대리인에 넣습니다. 그러나 실제 프로그램에서는 위임을 너무 복잡하게 만들고 코드 재사용을 상당히 어렵게 만듭니다. 앱 위임은 일반적으로 매우 작아야하며 대부분의 메소드는 <UIApplicationDelegate>이어야합니다.

+0

핵심 데이터 종속 응용 프로그램의 모든 곳에서 managedObjectContext를 사용하고 싶습니다. Appelegate를 가져 오는 모든 솔루션을 찾을 수 없습니다. 액세스 할 수 없습니다. 다른 방법이 있습니까? – Nil

+1

'managedObjectContext'를 앱 대리인이 아닌 다른 곳으로 이동하십시오. 자체적으로 싱글 톤이 될 수도 있고, 필요로하는 객체에 주입 될 수도 있습니다. 필자는 그것을 필요로하는 모델 객체에 개인적으로 삽입하고, View Controller가'ViewControllerServices' 싱글 톤을 통해 그것을 가져 오도록합니다. 하지만 앱 위임자는 아닙니다. –

+0

나는 appstate (userinfo, 설정, 다른 사용자 환경 설정)를 관리하는 싱글 톤을 가지고있다. 거기서 managedObjectContext의 강력한 속성을 만들고이를 'applicationDidFinishLaunching'코드에 초기화합니다. 이 흐름이 최적입니까? 나는 여기에서 응용 프로그램을 통해 managedObjectContext를 사용할 수 있습니다! – Nil

3

예를 들어 간단 할 수 있습니다. 합리적으로 복잡한 현실 세계의 앱의 경우, appdelegate 클래스는 꽤 ​​빨리 다루기 힘들어 질 것입니다.

3

기술적으로 할 수 있습니다. 프로그래밍 실습의 관점에서하지 마십시오. appDelegate에 많은 요소를 넣으면 매우 혼란스러워집니다. 내 충고는 그걸 내버려둬.

전역 변수를 제외하고 appDelegate에 아무 것도 입력 할 필요가 없습니다. 그리고 때때로 그것을 필요로한다면, 제 제안은 싱글 톤 패턴과 같은 다른 것을 사용할 것입니다. 일반적으로 전역 변수는 좋은 습관이 아닙니다.

희망이 도움이됩니다.

관련 문제