2012-02-04 3 views
1

UIViewController 클래스에서 확장 된 내 View Controller 클래스 MyVC가 있습니다. 지정된 초기화에서 내가UIViewController 지정된 이니셜 라이저 대 loadView 메서드

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     [self.view setBackgroundColor:[UIColor greenColor]]; 
    } 
    return self; 
} 

을 다음과 같은 녹색으로 배경색을 변경 또한 새로운 UIView의 객체를 만들고 RED

- (void)loadView 
{ 
    UIView* view = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    [self setView:view]; 
    [view release]; 
} 

로 지정된 초기화가 호출 색상을 변화에는 loadView 메소드가 loadView 호출 전에 그래서 나는 (내가 지정한 초 기자에서 녹색으로 설정 한) 내 뷰 색상이 RED가되어야한다고 생각합니다 (이는 loadView에서 수행 한 것입니다). 내 색상이 GREEN인데 지정된 초 기자에서 녹색 줄을 주석 처리하면 빨강 색으로 표시됩니다. 그렇다면 이니셜 라이저가 호출 된 후에 loadView 메서드의 뷰 속성을 재정의하지 않는 이유는 무엇입니까?

답변

3

-loadView의 목적은보기를로드하는 것입니다. 보기 컨트롤러의 view 속성에 액세스 할 때 호출되며 해당 속성의 값은 nil입니다. 이 경우 이니셜 라이저에서 self.view에 액세스하고 있으므로 -loadView이 호출됩니다. 그런 다음보기의 배경을 설정하므로보기가 녹색 배경으로 끝납니다.

+0

내 이니셜 라이저에서 self.view에 뷰를 할당하는 방법을 이해하지 못 했습니까? [self.view setBack ...] API가 암시 적으로 그렇게합니까? – theiOSguy

+0

Btw,이 경우 laodView가 호출되는 것을 확인했습니다. 또한 어디에도 내 이니셜 라이저에서 self.view 뷰를 설정하고 있습니다. – theiOSguy

+1

죄송합니다 - 설명해야합니다. UIViewController는 lazily 뷰를 생성하도록 설정됩니다. 필요할 때까지 뷰를 생성하지 않습니다. 'self.view'에 접근 할 때마다'view'는 nil입니다. 뷰 컨트롤러는 뷰를로드합니다. @robmayoff가 옳다. - 그렇게하기 위해'-loadView'를 호출하지만, 어디에서든지'self.view'에 접근합니다.이 경우에는 이니셜 라이저의 중간에 있습니다. 그 직후에'self.view'의 배경색을 설정했기 때문에 배경이 녹색 인 배경이됩니다. – Caleb

9

케일럽이 거의 옳습니다. 뷰 컨트롤러의 view 속성에 액세스하면 view 접근 자 메서드는 뷰가 아직로드되었는지 여부를 확인합니다. 그렇지 않은 경우 loadView을 호출 한 다음 viewDidLoad을 호출 한 다음보기를 반환합니다.

당신의 초기화에이 줄은 view 속성을 액세스 :

[self.view setBackgroundColor:[UIColor greenColor]]; 

그래서보기를 돌아가려면 view 접근은 loadView 메소드를 호출합니다. loadView 메서드는보기의 배경색을 빨간색으로 설정합니다. 그런 다음 이니셜 라이저가 배경색을 녹색으로 설정합니다.

당신이 당신의 초기화와 loadView 방법의 일부 NSLog의 뿌린다 경우 당신은 당신의 loadView 방법에 중단 점을 넣을 경우, 또는, 당신은 loadViewinitWithNibName:bundle:에서 호출 view, 호출되는 것을 볼 수 있습니다.

+0

감사합니다. 훌륭한 설명과 정확하게 이것은 일어나는 일입니다. – theiOSguy

+1

+1 잘 ... – Caleb

관련 문제