viewDidLoad和viewDidAppear之间的延迟

时间:2015-01-28 17:08:37

标签: ios objective-c

所以当我有这个奇怪的错误(?)时,我在XCode上做了一些基本的事情。

这两种方法之间有一点延迟,我无法理解为什么 Delay time

我认为它与之相关的一些代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"changing detail");
    [foodNameText setText:[food objectForKey:kTNFoodName]];
    [restaurantNameText setText: [food objectForKey:kTNRestaurantName]];
}

这不是一个大问题,但我认为这很奇怪,因为我的程序非常简单,所以iOS不应该超时计算任何东西。任何想法为什么会这样?

2 个答案:

答案 0 :(得分:3)

ViewController事件按此顺序运行......

- (void)viewDidLoad
    所有对象都是实例化的,但几何(框架等)尚未正确设置。

-(void)viewWillAppear:(BOOL)animated
现在几何图形正确,视图层次结构已准备好显示

  

此处转换动画将视情况运行

-(void)viewDidAppear:(BOOL)animated
动画完成。层次结构按几何图形显示。

因此,例如,如果您使用制作自定义过渡动画对象,则动画代码将在viewWillAppear之后和viewDidAppear之前运行。

我刚刚进行了一些简单的测试。

enter image description here

应用程序启动到VC1

2015-01-28 17:47:42.659 TestViews[14335:2062491] viewDidLoad
2015-01-28 17:47:42.660 TestViews[14335:2062491] viewWillAppear
2015-01-28 17:47:42.706 TestViews[14335:2062491] viewDidAppear


   1ms didLoad    -> willAppear
  46ms willAppear -> didAppear

动画"显示"从VC1到VC2的segue。

2015-01-28 17:48:52.347 TestViews[14335:2062491] viewDidLoad
2015-01-28 17:48:52.347 TestViews[14335:2062491] viewWillAppear
2015-01-28 17:48:52.851 TestViews[14335:2062491] viewDidAppear

< 1ms didLoad     -> willAppear
504ms willAppear  -> didAppear

从VC1到VC2的PushViewController动画:否

2015-01-28 17:50:31.713 TestViews[14335:2062491] viewDidLoad
2015-01-28 17:50:31.713 TestViews[14335:2062491] viewWillAppear
2015-01-28 17:50:31.714 TestViews[14335:2062491] viewDidAppear

< 1ms didLoad    -> willAppear
  1ms willAppear -> didAppear

动画时机在动画师的控制之下。在&#39; Show&#39;的情况下segue我想这个设计为0.5s

答案 1 :(得分:2)

抱歉,不能将其格式化为评论......

正在使用的时间是:

[super viewDidAppear:animated]; 

之前的日志...

关于这是做什么的,它可能是为视图或其他东西加载数据......你将不得不四处乱看,看看你是否可以了解它在做什么......设置一个断点并单步进入