Iphone 如果存在nib文件,是否会调用loadView?

Iphone 如果存在nib文件,是否会调用loadView?,iphone,loadview,Iphone,Loadview,如果重写loadView方法,无论是否存在nib文件,都将调用loadView。如果我不重写loadView,并且有一个nib文件,它会被调用吗?是,loadView负责根据视图控制器的类名从已知捆绑包自动加载nib文件。如果覆盖loadView且不调用[super loadView],则不会加载NIB。当UIViewController类的view属性被调用且为nil时,它将调用loadView 还要注意,重写loadView并调用super很可能不是您想要的loadView用于设置self.

如果重写loadView方法,无论是否存在nib文件,都将调用loadView。如果我不重写loadView,并且有一个nib文件,它会被调用吗?

是,
loadView
负责根据视图控制器的类名从已知捆绑包自动加载nib文件。如果覆盖
loadView
且不调用
[super loadView]
,则不会加载NIB。当UIViewController类的
view
属性被调用且为nil时,它将调用
loadView

还要注意,重写
loadView
并调用super很可能不是您想要的
loadView
用于设置
self.view
属性。其他一切都应该在
viewDidLoad
等中发生。

是:

@implementation iPhoneHomeViewController

- (void)loadView {
    DEBUGLOG(@"view = %@, superview = %@", [self valueForKey:@"_view"], [[self valueForKey:@"_view"] superview]);
    [super loadView];
}
控制台:

GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul  1 10:50:06 UTC 2011) 
Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU 
General Public License, and you are welcome to change it and/or distribute copies of it 
under certain conditions. Type "show copying" to see the conditions. There is absolutely 
no warranty for GDB.  Type "show warranty" for details. This GDB was configured as 
"x86_64-apple-darwin".sharedlibrary apply-load-rules all Attaching to process 1671. 

[Line: 40] -[iPhoneHomeViewController loadView]: view = (null), superview = (null)

对。无论捆绑包是否有Nib,都将始终调用Load view。 loadView将负责加载UIViewController的视图,该视图可以来自任何源

因此,它从两个方面寻找视图

1。检查属性nibFile,如果调用了initWithNibName:bundle: 或者,如果您有故事板-故事板也存储在nib文件中创建的所有视图


2.如果您没有从任何一个源设置nib,则您计划自己创建视图。在这种情况下,您可以稍后将此视图设置为view controller的view属性。

如果nib文件中没有视图怎么办?如果nib文件中有视图,是否会调用loadview?
loadview
始终被调用。如果nib没有
视图
属性,或者引用了视图控制器中不存在的IBOutlets,则会引发异常。尚未验证,但我很确定当
loadView
在找到与其类名匹配的nib或加载
initWithNibName:
中指定的nib后调用UINib时会出现异常。请注意,您应该将最喜欢的答案标记为已接受。