К сожалению, объяснение владельца файла довольно короткое в документах Apple. Я знаю, что это прокси-объект. Но что на самом деле смысл в этом объекте "Владелец файла"? Для чего это полезно?
Что описывает "Владелец файла" лучше всего в objective-c/cocoa Nib?
Ответ 1
Файлы Nib часто упоминаются как "замороженные" и готовы к запуску, и это отличный способ сделать ваши приложения более модульными, что может уменьшить использование памяти. Файлы Nib могут быть разморожены или загружены в память в любое время, когда приложение нуждается в объектах внутри него.
Всякий раз, когда файл nib разморожен, ему нужен указатель на объект, который размораживает его. И этот объект обычно является владельцем файла. Владелец файла позволяет объектам внутри файла nib обращаться к объектам, существовавшим до того, как файл nib был разморожен. В некотором смысле владелец файла действует как мост между вновь загруженными объектами и старыми объектами.
Ответ 2
Легче понять смысл ссылки File Owner, если вы читаете и понимаете процесс загрузки nib.
Cocoa фреймворки обрабатывают множество загрузок nib автоматически от вашего имени, причем один из Cocoa собственных встроенных классов служит в качестве класса контроллера, который управляет или "владеет" объектами, созданными в файле nib. Когда вы загружаете свои собственные наконечники вручную, вы можете выбрать, какой класс будет служить владельцем файла.
Когда вы читаете о процессе загрузки nib, обратите внимание на параметр "owner:" во многих методах загрузки. Это именно тот объект, который будет связан с объектами вашего файла nib как File Owner
Ответ 3
Я знаю, что это прокси-объект.
Это не так. Это реальный объект. Значок в nib является прокси-сервером только в том смысле, что все остальные значки представляют объекты, заархивированные в nib, а File Owner - нет. Но FO не является прокси-объектом в вашем приложении.
Но какой смысл в этом объекте "File Owner"? Для чего это полезно?
Это объект, которому принадлежат объекты в nib.
Что это. Ничего больше, чем это.
Ответ 4
Лучший способ объяснить это с примером того, как его настроить. Скажем, у вас есть подкласс NSWindowController, который является контроллером для окна настроек. Окно настроек находится в NIB под названием "Предпочтения".
В вашем подклассе NSWindowController у вас будет следующий метод init:
- (id)init {
if (self = [super initWithWindowNibName:@"Preferences"]) {
//do initalisation
}
return self;
}
Это инициализирует оконный контроллер, связав его с нитью с именем "Предпочтения" в главном комплекте приложения. Обратите внимание, что NIB еще не загружен (это произойдет, когда вы сначала вызовете -window на оконном контроллере.
В "Предпочтениях NIB" вы затем щелкните значок "Файл", а затем перейдите на панель "Информация о классе" инспектора. Здесь вы должны установить класс для имени вашего класса контроллера окон (например, PreferencesController). Теперь это экземпляр вашего оконного контроллера, чтобы вы могли подключать выходы и действия.
При редактировании в IB это просто прокси-объект объекта, как и любой объект, который вы перетаскиваете в NIB, но когда загружается NIB, он будет установлен на созданный вами оконный контроллер.
Ответ 5
http://www.cocoadev.com/index.pl?FilesOwner
В сущности, какой бы объект ни был загружен, NibFile становится владельцем файла для этого файла nib.