2009-05-05 4 views
2

나는 여기 저기에 몇 가지 앱을 만들었으며 주위를 돌아 다녔다. 언제나 나를 혼란스럽게 여기는 것은 전역 속성에 액세스하는 것이며, 그 속성을 설정하는 가장 좋은 장소는 어디입니까? 물건에 액세스하고 액세스하는 방법에 대해 몇 가지 질문이 있습니다.최우수 애플리케이션 위임 연습

응용 프로그램 대리인 헤더 파일을 액세스하려는 다른 파일에 포함시켜야합니까? 내가 사용하고자하는 뷰 컨트롤러가 있다고 가정 해 봅시다. 내 뷰 컨트롤러의 .h 안에 .h를 포함시켜야합니까?

@class AppDelegate; 

만 밖으로 입력하여 위임에 액세스 할 수 있습니다 :

[UIApplication sharedApplication].delegate 

각과마다 또는 내가 설정할 수 있습니까? 내가 익숙해 져야 할게 뭔가?

AppDelegate *delegate; 

그리고 init 함수 내에서, 그 변수에 싱글 인스턴스를 넣어 : 아니면 각 .H 내 구현에서 다음을 설정할 수 있습니다?

죄송합니다. 구조가 꺼져 있다면 죄송합니다.하지만 논리적 인 질문은 사람들이 마주 치고 해결하는 데 문제가 있다고 생각합니다.

+0

어떤 종류의 "전역 속성"입니까? 이러한 일은 대개 응용 프로그램 대리인이나 다른 공유 구조에 항상 액세스하지 않고도 더 잘 설계 할 수 있습니다. – zoul

+0

나는 애플 리케이션 대리자에 대해 특별히 말하고있는 것이 아니라, 다른 하나를 밀어 넣는 뷰 컨트롤러가 있다고 말하면, 나는 한 컨트롤러에서 다음 컨트롤러로 모든 것을 푸시하고 싶다. – Garrett

+0

컨트롤러간에 데이터를 전달하는 객체 지향적 인 방법은 이전 컨트롤러가 설정할 수있는 다음 컨트롤러에서 속성을 명시 적으로 정의하는 것입니다. –

답변

5

어쩌면 당신은 App Delegate를 어떻게 사용하고 있는지 다시 생각해 볼 필요가 있을까요? 어쩌면 당신은 아주 좋은 수업 설계를하지 않은 것 같아요.

여기에 상관없이 쉽게 할 수 있습니다. 이것을 init에 넣지 마십시오. 필요할 때 사용할 수 있습니다.

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

당연히 MyAppDelegate를 앱 대리인의 실제 클래스 이름으로 바꿉니다. 내가하는 경향 그러나

MYAPPDELEGATE.customProperty = blah; 

:

+0

그리고 자신을 반복하지, 당신은 같은 대리자에서 클래스 메서드에 해당 코드를 넣을 수 있습니다 + (MyAppDelegate *) applicationDelegate { 리턴 (MyAppDelegate *) [[UIApplication sharedApplication] 위임] } –

0

또 다른 가능성을 포함하여 후 뭔가를 할 수 있도록 응용 프로그램 위임 헤더 파일에 #define로 제대로 주조 애플 대리자 참조를 사용하는 코드를 추가하는 것입니다 #defines를 사용하면 단순히 코드를 입력하는 것보다 성가신 코드 완성을 혼동하므로 John이 제시 한 라인을 작성하는 것만으로도 좋습니다.

또한 언급했듯이 앱 대리인에 대한 참고 자료가 많으면 이러한 참조를 집에 가깝게 유지하기 위해 구조 조정을 할 수 있습니다.