先说下我遇到这个崩溃问题的原因:
自定义的Viewxib和系统的 View重名,导致崩溃
我的理解是我这里加载YJLoginViewController 的时候,YJLoginViewController系统自带的 view 和我自定义的YJLoginView命名重复,OC 是不支持命名重载的,Controller在加载的时候加载了自定义的 View的 xib 文件,去掉 xib文件是可以加载的,回想下 UIViewController 的生命周期 alloc 创建对象,分配空间 -->init (initWithNibName) 初始化对象,初始化数据 -->loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图 -->viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件 -->viewWillAppea 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了 -->viewDidAppear视图已在屏幕上渲染完成
我想重点在于:loadView
每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。
[super loadView]里面它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,