viewDidLoad执行早于initWithNibName

刚发现这个问题的时候太都头疼了,没有init怎么viewDidLoad呢??

后来发现这是因为重载的原因,父类里面同样有initWithNibName方法,这样执行的顺序就是:

initWithNibName(父类) ->  viewDidLoad (子类)-> viewDidLoad (父类)-> initWithNibName(子类)

中间的部分是交叉执行的,因为子类会调用[super viewDidLoad], 这样就会执行父类的viewDidLoad函数。

解决方法很简单:如果你父类里面initWithNibName没有做任何工作,直接删除就可以了。

viewDidLoad执行早于initWithNibName,布布扣,bubuko.com

时间: 2024-09-29 02:20:00

viewDidLoad执行早于initWithNibName的相关文章

loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的用法

转载,原地址为:http://jianyu996.blog.163.com/blog/static/11211455520131226840879/ 请尊重原创: 1,无论XIB还是代码创建都会调用loadView方法.self.view为nil时才会被调用. 手工创建视图时,loadView被调用时self.view还为nil.一般在该方法中手工定制view.       XIB创建视图时,loadView仍会被调用.loadView被调用时XIB定制的视图还没创建完成,若是再覆写该方法的话.

关于UIView 中init(包括重写) 与 viewDidLoad执行顺序问题

相信很多朋友认为,init 与viewDidLoad 的执行顺序肯定是init->viewDidLoad ,其实我认为只说对了一半.如果创建视图对象使用的是 [[MyViewController alloc] init],执行顺序确实是init->viewDidLoad,但如果我在MyViewController.m中重写了init,并且在init方法中写入了涉及视图(self.view等)属性的代码,如我重写init的代码为: -(instancetype)init { self=[supe

loadView 和 viewDidLoad 执行的问题

首先,我们需要知道在viewController 的生命周期 当在loadView里面重写[super loadView]的时候 父类的view视图已经加载初始化并开辟了空间,所以此时应该调用 self.view addSubView 进行子视图的加载,如果调用 self.view 等于某个子视图,那么父类初始化的view将没有指针指向. 当在loadView中没有重写super loadView的时候,应该调用self.view = 新view  否则view没有进行初始化 调用addSubV

控制器view的加载顺序initWithNibName >>> viewDidLoad >>> viewWillAppear >>> viewDidAppear

-(void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBarHidden=NO;// 邓超界:放在willAppear,不能放在viewDidLoad(因为先执行viewDidLoad,再执行viewWillAppear.还有当控制器没有dealloc,viewDidLoad不会在执行了) } 执行顺序: initWithNibName >>> viewDidLoad >>>

viewDidLoad与initWithNibName的调用时机

加载一个ViewController,我们通常使用init或者initWithNibName方法初始化,但是有的时候会出现一些需要初始化的值没有得到正确的设置,下面给出代码看下实际的效果. 第一种情况:正常初始化 FatherViewController: -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:

awakeFromNib initWithNibName:bundle 区别

awakeFromNib 当一个.nib或.storyboard文件被加载时,该文件中的每个对象都会收到awakeFromNib消息: 换句话说,通过.nib或.storyboard创建view对象时,会执行awakeFromNib: initWithNibName:bundle

静态代码块、非静态代码块、构造函数之间的执行顺序

1.执行顺序 静态代码块>非静态代码块>构造函数 public class staticCode { public staticCode() { System.err.println("构造函数"); } { System.err.println("非静态代码块"); } static{ System.err.println("静态代码块"); } public static void main(String[] args) { ne

dispatch_sync添加到viewDidLoad卡死问题理解

- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"1"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); NSLog(@"3"); } 上面的代码只会打印1 然会就会线程卡死,这是为什么呢? 因为dispatch_get_main_queue()得到的是一个串行队列,串行队列的特点: 一次只调度一个任务,队列中的任务一个

Unity脚本生命周期与执行顺序

文章目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象上才能开始它的生命周期.游戏对象可以理解为能容纳各种组件的容器,游戏对象的所有组件一起决定了这个对象的行为和游戏中的表现. 脚本生命周期 Unity脚本中的常见必然事件如下表所示 名称 触发时机 用途 Awake 脚本实例被创建时调用 用于游戏对象的初始化,注意Awake的执行早于所有脚本的Start函数 On