UIViewController
에 AppDelegate를 인스턴스 변수로 포함해도됩니까?iOS - AppDelegate를 인스턴스 변수로 사용 하시겠습니까?
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate doSomething];
내가 할 수있는 :
[appDelegate doSomething]
UIViewController
에 AppDelegate를 인스턴스 변수로 포함해도됩니까?iOS - AppDelegate를 인스턴스 변수로 사용 하시겠습니까?
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate doSomething];
내가 할 수있는 :
[appDelegate doSomething]
아니면의 UIViewController의 서브 클래스에서
-(YourAppDelegate*) app
{
return (YourAppDelegate*) [[UIApplication sharedApplication] delegate];
}
을 할 수는 - 다음 할 당신의 뷰 컨트롤러의 모든 기본 클래스.
그러면 [self app]
이 작동하므로 참조를 보관할 필요가 없습니다.
일반적인 공용 유틸리티를 유지하기 위해이 작업을 수행합니다. 카테고리로도이 작업을 수행 할 수 있습니다.
의 구분을 액세스하는 사이에 내가 뭘 그렇게 대신에 자주 액세스해야하기 때문에 @property (nonatomic, weak) AppDelegate *appDelegate;
처럼 왜 내가 부탁 해요입니다 전체 표현식 대 (비 원자력, 약한) 속성에 의한 위임은 임의적입니다. 확실히 호출 할 경우 속성을 정의하여 코드 줄을 저장하지 않아도됩니다.
그러나 문제는 가능한 캡슐화 문제의 더 큰 문제를 제기합니다. 모범 사례는 통화가 계층 구조에 비해 대 상으로 내려가는 것을 제안합니다. 물론 애플 리케이션 델리게이트는 약간의 특별한 경우이지만, 여전히, 애플 리퀘스트에서 필요한 리소스를 격리시키는 방법을 고려하고 이러한 레퍼런스를 뷰 컨트롤러 계층 구조로 전달합니다. 만들어진.
아마도 괜찮을 수도 있습니다.
하지만 내가 가장 좋아하는 해결책은 다음과 같습니다. 당신의 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/
는 희망이 도움이 읽을 수 있습니다.
'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; ' –
@AlexPretzlav 당신의 편집에 감사드립니다. –
자주 액세스하는 경우 다른 곳으로 이동하지 않으시겠습니까? – Osiris