2012-01-13 1 views
0

이 예는 큰 얼간이 범위 아이폰 책 (페이지 144분의 143)에서 가져 ItemsViewController가있는 UITableViewController의 서브 클래스는 다음과 같습니다AppDelegates에 루트 컨트롤러에 대한 인스턴스 변수가있는 이유는 무엇입니까? -

@interface HomepwnerAppDelegate : NSObject <UIApplicationDelegate> 
{ 
    UIWindow *window; 
    ITemsViewController* itemsViewController; 
} 

.... 
itemsViewController = [[ItemsViewController alloc] init]; 
[window setRootViewController: itemsViewController] 

내 질문입니다 왜 필요한 바르 itemsViewController을 가지고, 왜 그냥 대신 이렇게 :

... 
window.rootViewController = [[ItemsViewController alloc] init]; 

을 나는 그래서 난 왜 이해가 안 돼요 그 rootViewController를 파괴 창을 가정하지 않을 때 응용 프로그램이 종료되고, 따라서 거기에 누출을하고, 윈도우 응용 프로그램의 수명 동안 존재가 될 것입니다 그리고 다른 많은 예제는 루트 컨트롤러에 대해 별도의 iVar를 가지고 있습니까?

TIA 당신이 필요하지 않은 경우 주위에 바르를 유지하기 위해 절대적으로 필요가

답변

1

을 (당신은 ARC를 사용하지 않는 경우) 가장 큰 장점은 또 다시 캐스팅 필요하고하지 않고 뷰 컨트롤러의 방법에 액세스 할 수 단순히 백그라운드/포 그라운드 및 유사한 앱 델리게이트 콜백을 입력하기위한 핸들러를 구현할 때와 같이 앱 위임자로부터 자주 루트보기 컨트롤러를 참조하십시오.

0

.

알아두기 autorelease를하지 않으면 ItemsViewController가 누출됩니다.

[itemsViewController doSomething]; 
// vs. 
[(ItemsViewController *)window.rootViewController doSomething]; 

은 당신이해야 할 수도 있습니다 응용 프로그램에 따라 :

0

이유는 역사적이라고 생각합니다. 그 책이 쓰여졌을 때 창과 루트보기 컨트롤러는 모두 IBOutlets이었고 MainWindow.nib라는 nib 파일에서 설정되었습니다.

또한 UIWindow는 컨트롤을 할당하기 위해 rootViewController 속성을 사용하지 않았습니다 (루트보기 controller.view는 방금 서브 뷰로 직접 추가되었습니다). 그래서 당신이 ivar에 저장하지 않았다면 루트 뷰 컨트롤러가 생성되는 즉시 풀어지기 때문에 아무 것도 유지되지 않고 앱이 작동하지 않습니다.

그러나 최근에는 iOS4 이후 ARC 이후 기본 프로젝트 템플릿이 업데이트되었으며 더 이상 필요없는 ivars가 없습니다. 뷰 컨트롤러에 여전히 @ 속성이 있지만 기술적으로 더 이상 필요하지 않으며 새로운 컨트롤러를 window.rootViewCOntroller에 직접 할당하는 대체 솔루션이 정상적으로 작동합니다.

0

이것은 완전히 문체적인 선택입니다. 편의 접근자를 가져 오는 다른 방법이 있습니다. 나는 결코 내 바바리를 만들지 않는다. rootViewController 절대 바뀌지 않는다. 나는 보통 읽기 전용 속성으로갑니다.

@property (nonatomic, readonly) MyRootViewController *rootViewController; 

- (MyRootViewController *)rootViewController { 
    if ([self.window.rootViewController isKindOfClass:[MyRootViewController class]) { 
     return (MyRootViewController *)self.window.rootViewController; 
    } 
    return nil; 
} 
관련 문제