Может кто-нибудь объяснить владельца файла в iOS

Заранее извиняюсь за этот вопрос, хотя он долго обсуждался с момента выхода iOS. Но я до сих пор не понимаю, несмотря на все мои усилия. Самое близкое изображение, которое я могу себе представить, это «замороженный и высушенный граф объектов», что хорошо, но это не помогает соединить точки, когда дело доходит до необработанного программирования.

Итак, учитывая, что вы не можете ничего описать, пока не выясните, что он делает, давайте возьмем следующий пример:

1) У меня есть файл Xib, скажем, UIView, с метками и imageView

2) У меня есть classX, подкласс от UIView, который был прикреплен к Xib в инспекторе идентификации IB. Выходы ИБ и действия ИБ подключаются к этому классу в инспекторе соединений. Этот класс объявляет IB/IA как свойства.

3) У меня есть UIViewController, представленный classVC. В этом классе я создаю экземпляр 1) с использованием стандартного [[NSBundle mainBundle] loadNibNamed:@"bla" owner:??? options:nil][0];

4) classX и classVC общаются через настраиваемых делегатов, стандартные вещи.

Вопросы:

а) Кто является владельцем файла XIB. Честно говоря, я понятия не имею.

б) что мне поставить в [[NSBundle mainBundle] loadNibNamed:@"bla" owner:??? options:nil][0]; для параметра owner, и самое главное, почему?

Когда граф объектов размораживается и поливается водой, не должна ли среда выполнения подключаться к розеткам, определенным в 2), так какой в ​​этом случае смысл владельца файла?

OR

Если выходы файла XIB ни к чему не подключены, означает ли «владелец файла» «я класс, содержащий все необходимые выходы, чтобы можно было установить соединения между экземпляром этого класса и распакованным XIB? (поэтому я не поймите, ведь как бы ассоциация сложилась???)

Ну это все. Такой же тупой, как и прежде.

РЕДАКТИРОВАТЬ: я не согласен с тем, что другие ответы одинаково верны. Я понимаю, что они имели в виду, но пока мне еще предстоит понять, что должен содержать параметр owner для описываемого мной случая, а главное, почему.


person Alex    schedule 20.03.2013    source источник
comment
Вот отличный ответ на: [1]: stackoverflow.com/questions/3768602/   -  person Adrian P    schedule 20.03.2013
comment
Apple заменила XIB раскадровками, у которых больше нет владельца файлов.   -  person vqdave    schedule 20.03.2013
comment
@vectorquake Apple, конечно же, не заменила XIB раскадровкой. Они сосуществуют и всегда будут сосуществовать.   -  person Till    schedule 20.03.2013
comment
@CodeMonkey, чего я не понимаю, так это того, что если это так важно, зачем устанавливать значение nil? если это класс, которому принадлежат IBoutlets, почему бы не написать MyClass* XYZ =[[NSBundle mainBundle] loadNibNamed:@NibName owner:XYZ options:nil]; ?   -  person Alex    schedule 20.03.2013
comment
@Alex Это не работает, потому что владельцем должен быть ранее созданный объект (например, ваш контроллер представления). Если XYZ является подклассом представления, если вы хотите связать ссылки IBOutlet и IBAction с самим подклассом представления, вы должны (а) указать пользовательский класс для самого представления в IB; и (б) вы свяжете действия и выходы с этим, а не с владельцем файла. Очевидно, что если у вас есть IBAction, который вы хотите связать с владельцем файла (например, контроллером), вы тоже можете это сделать. Но вы никогда не назначите владельцем представления, созданного NIB, самого себя.   -  person Rob    schedule 20.03.2013
comment
См. О владельце файла. Суть в том, что владелец важен, если вы связываете с ним торговые точки и действия. Но если вы укажете собственный класс для своего представления в IB, вам могут вообще не понадобиться никакие ссылки на владельца. Это просто зависит от того, что вы делаете. Лично я склонен использовать self (например, контроллера представления, который вызывал это) в качестве владельца, но NIB нередко не делает никаких ссылок на владельца.   -  person Rob    schedule 20.03.2013
comment
@Rob спасибо, это тоже было мое впечатление. Единственный способ понять [[NSBundle mainBundle] loadNibNamed:@NibName owner:??? options:nil], выполнив следующие действия. 1) MyClass* XYZ = [MyClass alloc]init]; и 2) [[NSBundle mainBundle] loadNibNamed:@NibName owner:XYZ options:nil]; Где MyClass связан с этим NIB в IB. в этом случае у XYZ все выходы/действия установлены правильно. Итак, если вы установите его на self, и если self не является экземпляром класса, связанного с NIB, например: self — это контроллер, NIB — UVIview, как правильно подключить Outlets и IActions?   -  person Alex    schedule 20.03.2013
comment
Это зависит от того, что такое MyClass. Если это общий NSObject, для которого у вас, например, определены некоторые IBAction методы, то ваш подход звучит хорошо. Но если это подкласс UIView, предназначенный для представления представления, созданного в NIB, то я думаю, что указывать его как владельца неправильно (если только то, что находится в вашем NIB, не предназначено для подпредставления другого представления). В итоге я не считаю, что владельцем должно быть представление, указанное в NIB, а какой-то другой, уже существующий объект (контроллер, представление и т. д.), которому будут принадлежать объекты, созданные iOS из NIB.   -  person Rob    schedule 20.03.2013
comment
@Alex Если вы хотите продолжить обсуждение (например, просмотреть несколько наглядных примеров), дайте мне знать, и мы сможем организовать чат.   -  person Rob    schedule 20.03.2013
comment
@Rob, уверен, я думаю, что простой пример поможет мне разобраться в этом. Как работает чат на SO?   -  person Alex    schedule 20.03.2013
comment
давайте продолжим обсуждение в чате   -  person Rob    schedule 20.03.2013