我想创建一个View
/ Window
,在我的应用程序中执行一些初始加载。我试过这样的事情:
StartWindow *start = [[StartWindow alloc] initWithNibName:@"Start" bundle:nil];
self.startWindow = start;
[start release];
[window addSubview:startWindow.view];
暂时在viewDidLoad
内的StartWindow
事件中我只有[NSThread sleepForTimeInterval:3.0];
来模拟我的加载。
问题我的视图直到 线程结束后才会显示。 为什么?
修改
以上代码位于didFinishLaunchingWithOptions
内。
答案 0 :(得分:1)
问题是您阻止了主线程,因此操作系统无法刷新窗口并显示新视图。 您可以尝试在第二个线程中执行加载,或者,如果您需要调用许多非线程安全函数,您可以通过NSTimer在很短的时间后开始加载,以便操作系统有时间刷新窗口
另一种方法是在viewDidAppear:
中执行加载,在显示视图时调用该加载,而在从nib文件加载视图时调用viewDidLoad。
答案 1 :(得分:1)
因为框架正在等待您在viewDidLoad
中完成初始化视图。如果要在后台进行加载,则必须使用某种后台处理工具,如单独的线程或NSOperationQueue。
BTW,sleepForTimInterval
实际上并不在单独的线程中运行。它使调用线程处于休眠状态(在本例中为主UI线程)。