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 메서드의 뷰 속성을 재정의하지 않는 이유는 무엇입니까?
내 이니셜 라이저에서 self.view에 뷰를 할당하는 방법을 이해하지 못 했습니까? [self.view setBack ...] API가 암시 적으로 그렇게합니까? – theiOSguy
Btw,이 경우 laodView가 호출되는 것을 확인했습니다. 또한 어디에도 내 이니셜 라이저에서 self.view 뷰를 설정하고 있습니다. – theiOSguy
죄송합니다 - 설명해야합니다. UIViewController는 lazily 뷰를 생성하도록 설정됩니다. 필요할 때까지 뷰를 생성하지 않습니다. 'self.view'에 접근 할 때마다'view'는 nil입니다. 뷰 컨트롤러는 뷰를로드합니다. @robmayoff가 옳다. - 그렇게하기 위해'-loadView'를 호출하지만, 어디에서든지'self.view'에 접근합니다.이 경우에는 이니셜 라이저의 중간에 있습니다. 그 직후에'self.view'의 배경색을 설정했기 때문에 배경이 녹색 인 배경이됩니다. – Caleb