initWithNibName VS loadNibNamed NSBundle - PullRequest
       10

initWithNibName VS loadNibNamed NSBundle

16 голосов
/ 10 ноября 2009

Я заметил, что есть два разных способа загрузки файлов nib / xib:

  1. с помощью метода UIView initWithNibName:bundle:
  2. NSBundle's loadNibNamed:owner:options: метод.

Может ли кто-нибудь объяснить различия между этими двумя, и когда более уместно использовать одно над другим и при каких обстоятельствах?

Например, если я загружаю собственное представление заголовка раздела таблицы из nib-файла в tableView: viewForHeaderInSection: метод, какой из них я бы использовал?

Или, если бы я загружал пользовательскую ячейку табличного представления из nib-файла, какую бы я использовал?

Ответы [ 2 ]

11 голосов
/ 10 ноября 2009
Методы

NSBundle - это общий API, который используется для разархивирования NIB. Они выполняют реальную работу (вместе с NSNib).

UIViewController s initWithNibName:bundle:, с другой стороны, это способ инициализации контроллера представления, который (может) загрузить свое представление из кончика. Метод сам по себе не загружает перо, а просто принимает к сведению имя. Контроллер лениво загружает перо, когда запрашивается представление.

Мне не известно о загрузке пера в UIView.

8 голосов
/ 21 февраля 2012

Если контроллер представления вашего заголовка содержит IBOutlets для каких-либо полей в файле пера, будет лучше загрузить файл nib вместо вызова initWithNib. В контроллере представления файла заголовка измените оператор инициализации следующим образом. Оператор по умолчанию закомментирован.
Таким образом вы сможете получить доступ к полям в nib-файле, используя IBoutlets.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    // Custom initialization.
    if ([[NSBundle mainBundle] loadNibNamed:@"NibFile" owner:self options:nil]) {

    }

    return self;
}
...