我想提出一个模态vc。但是,由于用户试图点击按钮直到他们在屏幕上看到一些东西,因此延迟似乎需要大约5秒左右。
我的模态视图有3个页面,每个页面有6个表作为子视图。我没有使用任何网络连接。所有表都是从本地xml数据加载的。
所以,我的问题是 1)有没有办法可以改善加载的模态vc的性能? 2)或者我可以显示活动指示器并让视图加载到后台线程并在加载完成后移除指示器吗?
我尝试了选项2.我使用 performSelectorInBackground 方法在后台线程中启动 viewDidLoad 上的活动指示器和所有页面初始化代码。但是,这使得我的桌子看起来很奇怪,那里的框架都是扭曲的,有宽度被拧紧等等。任何建议都会对你有所帮助。
答案 0 :(得分:2)
永远不要在后台线程中显示或修改界面元素。如果您在后台线程中并且想要在主线程中执行某些操作,则可以使用选择器:
[self performSelectorOnMainThread:@selector(doSomething:)
withObject:someObject
waitUntilDone:NO];
或者您可以使用GCD(我最喜欢的):
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething:someObject];
});
无论您使用哪种方法,只需确保如果您在后台线程中加载数据然后尝试从该后台线程加载视图,请始终在主线程上执行该调用,否则您将得到奇怪的你提到的行为。
答案 1 :(得分:0)
您可以在viewDidAppear上显示活动指示器,然后在后台线程中获取数据,您只需刷新视图/ tableview即可。这样,模态视图在呈现时不会是5秒或延迟。