programing

iPhone SDK: loadView와 viewDidLoad의 차이점은 무엇입니까?

muds 2023. 4. 21. 21:33
반응형

iPhone SDK: loadView와 viewDidLoad의 차이점은 무엇입니까?

iPhone 앱에서 뷰 및 뷰 컨트롤러를 사용할 때 loadView와 viewDidLoad의 차이점을 설명할 수 있는 사람이 있습니까?

제 개인적인 맥락은 모든 뷰를 코드에서 작성한다는 것입니다.인터페이스 빌더를 사용하지 않습니다.사용하지 않습니다.

loadView에 초기화 코드를 추가하면 무한 스택트레이스가 되기 때문에 보통 viewDidLoad에서 모든 아이뷰 빌드를 수행합니다.하지만, 각각이 언제 실행되는지, 그리고 초기화 코드를 어디에 넣는 것이 더 적합한지 잘 모르겠습니다.가장 좋은 것은 초기화 콜의 간단한 다이어그램입니다.

감사합니다!

내가 해냈기 때문에, 여기서 무엇이 문제인지 짐작할 수 있다.

loadView에 초기화 코드를 추가하면 무한 스택트레이스가 되는 경우가 많습니다

자기 자신을 읽지 마세요.-loadView로 표시합니다.설정만 해, 이해 못 해.

자기 자신.뷰가 현재 로드되지 않은 경우 뷰 속성 액세스자가 -loadView를 호출합니다.무한 재귀가 있군요

-loadView에서 프로그래밍 방식으로 뷰를 빌드하는 일반적인 방법은 Apple의 사전 인터페이스 빌더의 예에서 볼 수 있듯이 다음과 같습니다.

UIView *view = [[UIView alloc] init...];
...
[view addSubview:whatever];
[view addSubview:whatever2];
...
self.view = view;
[view release];

그리고 IB를 사용하지 않는 것도 비난하지 않습니다.모든 Instapaper에서 이 방법을 사용했는데, IB의 복잡성, 인터페이스 기묘한 문제, 예상치 못한 뒷동작에 대처하는 것보다 훨씬 더 편하다는 것을 알게 되었습니다.

loadView에 있어서의 방법입니다.UIViewController뷰가 실제로 로드되어 에 할당됩니다.view소유물.또한 이 장소는 서브클래스가UIViewController를 프로그램적으로 셋업 할 경우 덮어쓰게 됩니다.view소유물.

viewDidLoad뷰가 로드되면 호출되는 메서드입니다.이것은 loadView가 호출된 후에 호출됩니다.이 위치에서는 보기의 초기 설정을 수행하는 코드를 덮어쓰고 삽입할 수 있습니다.

viewDidLoad()

NIB에서 뷰를 로드하고 실행 후 커스터마이즈를 수행할 때 사용합니다.

LoadView()

(Interface Builder를 사용하지 않고) 프로그래밍 방식으로 뷰를 작성할 때 사용합니다.

NilObject가 말한 내용을 설명하기 위해 코드 예를 추가했을 뿐입니다.

- (void)loadView
{
    // create and configure the table view
    myTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStyleGrouped];   
    myTableView.delegate = self;
    myTableView.dataSource = self;
    myTableView.scrollEnabled = NO;
    self.view = myTableView;

    self.view.autoresizesSubviews = YES;
}

- (void)viewDidLoad 
{
  self.title = @"Create group";

  // Right menu bar button is to Save
  UIBarButtonItem *saveButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStyleDone target:self action:@selector(save)];
  self.navigationItem.rightBarButtonItem = saveButtonItem;
  [saveButtonItem release];
}

자아를 읽을 때 무한 루프가 발생하지 않도록 하기 위해서입니다.뷰를 로드할 때 클래스의 슈퍼 구현을 호출합니다.슈퍼 실장에서는 새로운 UIView가 할당됩니다.

- (void) loadView {
[super loadview];

// init code here...

[self.view addSubView:mySubview1]; //etc..

}

loadView를 사용하는 가장 쉬운 방법은 UIViewController의 서브클래스인 MyBaseViewController와 같은 기본 뷰 컨트롤러를 만드는 것입니다.loadView 메서드에서 다음과 같이 뷰를 만듭니다.

-(void) loadView {
    if ([self viewFromNib]) {
        self.view = [self viewFromNib];
    } else {
        self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    }
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    self.view.backgroundColor = [UIColor whiteColor];
}

뷰 컨트롤러를 만들어야 할 때는 MyBaseViewController의 서브클래스를 사용하고 loadView컨트롤러에서는 [super loadView]라고 부릅니다.

//sucblass loadView
-(void) loadView {
    [super loadView];

    //rest of code like this..
    UILabel *myLabel = [[UILabel alloc] initWithFrame:myFrame];
    [self.view addSubview:myLabel];
    [myLabel release];
}

loadView()는, 가 「컨트롤러」의됩니다.self.view서도 할 수 있어요.

self.view = [UIView alloc] init...];

는 이미 이름 "UIController"를 .-loadView() 전화하세요.

[super loadView];

두 번째 접근법은 상속을 장려하기 때문에 나는 정말로 추천한다.뷰 컨트롤러가 UIViewController에서 직접 상속되지 않은 경우에만 해당됩니다.

viewDidLoad에 대한 Apple의 정의에서는 컨트롤러의 뷰가 메모리에 로드된 후에 호출된다고 언급되어 있습니다.쉽게 말하면 가장 먼저 로딩되는 방법입니다.

이 방법은 어떤 조건에서 충분히 활용될 수 있을까?정답은 기본적으로 앱이 먼저 로딩되기를 원하는 것입니다.예를 들어, 흰색 대신 파란색을 선택할 수 있는 다른 배경색을 원할 수 있습니다.

언급URL : https://stackoverflow.com/questions/573958/iphone-sdk-what-is-the-difference-between-loadview-and-viewdidload

반응형