2016-02-04 5 views
1

мне приходится иметь дело с какой-то код, который я не совсем понимаю, похожее на это:законное использование `[self loadView]`?

В PrimaryViewController:

- (void)setup 
{ 
    secondViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    [secondViewController loadViewWithFrame:viewFrame webViewURL:url]; 
    [self.view addSubview:secondViewController.view]; 
    ... 
} 

И в SecondViewController:

- (void)loadViewWithFrame:(CGRect)frame webViewURL:(NSString *)url 
{ 
    if (![self isViewLoaded]) { 
     [self loadView]; 
    } 
    self.view = [[UIView alloc] initWithFrame:frame]; 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]]; 
    [self.view addSubview:webView]; 
    ... 
} 
  1. Как вы думаете, законно позвонить [self loadView]? (Apple обычно не хочет вас)
  2. Какой смысл воссоздать self.view сразу после?

Примечание: минимальный SDK проекта - это iOS7.

+2

-loadView вызывается всякий раз, когда вы получаете доступ к свойству вида, и он еще не инициализирован. Блок if в начале -loadViewWithFrame является избыточным. –

+1

Парень, которого вы унаследовали от этого кода, не читал документы Apple и, вероятно, имел некоторые серьезные заблуждения относительно жизненного цикла просмотра. –

+1

Этот код также не имеет смысла. Задачей 'loadView' является установка' self.view'. Но после этого следующая строка кода выбрасывает только что загруженное представление. –

ответ

0

Звонок [self loadView] не является законным в данном примере.

Восстанавливающий self.view не является законным в данном примере: он делает initWithNibName:bundle: бесполезным.

Таким образом, оба оператора могут быть удалены.