2012-02-10 6 views

답변

12

아니면의 UIViewController의 서브 클래스에서

-(YourAppDelegate*) app 
{ 
    return (YourAppDelegate*) [[UIApplication sharedApplication] delegate]; 
} 

을 할 수는 - 다음 할 당신의 뷰 컨트롤러의 모든 기본 클래스.

그러면 [self app]이 작동하므로 참조를 보관할 필요가 없습니다.

일반적인 공용 유틸리티를 유지하기 위해이 작업을 수행합니다. 카테고리로도이 작업을 수행 할 수 있습니다.

4

의 구분을 액세스하는 사이에 내가 뭘 그렇게 대신에 자주 액세스해야하기 때문에 @property (nonatomic, weak) AppDelegate *appDelegate;

처럼 왜 내가 부탁 해요입니다 전체 표현식 대 (비 원자력, 약한) 속성에 의한 위임은 임의적입니다. 확실히 호출 할 경우 속성을 정의하여 코드 줄을 저장하지 않아도됩니다.

그러나 문제는 가능한 캡슐화 문제의 더 큰 문제를 제기합니다. 모범 사례는 통화가 계층 구조에 비해 대 상으로 내려가는 것을 제안합니다. 물론 애플 리케이션 델리게이트는 약간의 특별한 경우이지만, 여전히, 애플 리퀘스트에서 필요한 리소스를 격리시키는 방법을 고려하고 이러한 레퍼런스를 뷰 컨트롤러 계층 구조로 전달합니다. 만들어진.

16

아마도 괜찮을 수도 있습니다.

하지만 내가 가장 좋아하는 해결책은 다음과 같습니다. 당신의 AppDelegate.m

+ (AppDelegate *)appDelegate 
{ 
    return (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

에서 AppDelegate.h

+ (AppDelegate *)appDelegate; 

그런 다음 사용하여에

당신이 원하는 목적지 :

AppDelegate* sharedDelegate = [AppDelegate appDelegate]; 

일부 노트 :

AppDelegate을 공유 데이터로 사용하는 경우 singletons-appdelegates-and-top-level.html을 읽을 수 있습니다. 당신이 당신의 논리적 응용 프로그램 워크 플로우에 대한 AppDelegate를 사용하는 경우

당신은 handling-your-initial-view-controllers-for-iphone/

는 희망이 도움이 읽을 수 있습니다.

+0

'getAppDelegate'는 Apple의 [이름 지정 지침] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282- BCIGIJJF).더 좋은 이름은'+ (AppDelegate *) appDelegate; 또는'+ (AppDelegate *) sharedAppDelegate; ' –

+0

@AlexPretzlav 당신의 편집에 감사드립니다. –

관련 문제