Ios 改进UIWebView初始化时间
我的公司使用Ios 改进UIWebView初始化时间,ios,objective-c,performance,uiwebview,Ios,Objective C,Performance,Uiwebview,我的公司使用UIWebView来显示广告。我遇到的问题是初始化UIWebView似乎很昂贵;使用时间分析器进行分析时,显示[UIWebView alloc]initWithFrame:CGRectMake(0,0500500)]的时间为31–40ms。这足以在以每秒60帧的速度运行的游戏中造成明显的帧下降 有没有办法解决这个缓慢的初始化时间?我目前的想法是在应用程序启动时(但在游戏开始之前)创建一个UIWebView,然后重用它(可能会创建一个可重用的池,比如UITableViewCell的工作
UIWebView
来显示广告。我遇到的问题是初始化UIWebView
似乎很昂贵;使用时间分析器进行分析时,显示[UIWebView alloc]initWithFrame:CGRectMake(0,0500500)]
的时间为31–40ms。这足以在以每秒60帧的速度运行的游戏中造成明显的帧下降
有没有办法解决这个缓慢的初始化时间?我目前的想法是在应用程序启动时(但在游戏开始之前)创建一个UIWebView
,然后重用它(可能会创建一个可重用的池,比如UITableViewCell
的工作方式),或者尝试看看WKWebView
是否有更好的性能。以下是我的发现:
WKWebView
初始化速度不会更快。创建WKWebView
s所用的时间与创建UIWebView
s所用的时间相似(在我做的1个测试中,创建两个WKWebView
s所用的时间为46毫秒)UIWebView
s池对于我的用例来说是一个很好的解决方案。通过在应用程序启动时创建webview,然后重用它们,我避免了在游戏运行时造成帧下降UIWebView
和WKWebView
之间的响应性没有太大差异,因为引入WKWebView
是为了iOS和OSX之间的一致性问题。底层引擎是Webkit,它需要大量初始化
近年来我发现的最佳解决方案是从加载url的0.1 alpha视图开始淡出WebView
。请注意不要从0.0开始,也不要将您的WebView与主视图层次结构分离,因为不会加载url
当调用didfishload
时,您可以将其淡入1.0,从而提供更好的用户体验。
就我个人而言,我不喜欢
UIWebView
池,因为我在维护它时遇到了一些内存问题,尤其是在iOS 7设备上。在一段时间延迟后调用该函数。您可以使用dispatch或perform selector。@iOS我认为这没有帮助,因为webview仍然需要在主线程上初始化。正在初始化延迟一段时间后的webview只是将性能下降的点向后推。@MaxGabriel我从来没有注意到初始化UIWebView要花费这么多时间。IOS的意思是使用dispatch或NSOperationQueue在另一个线程中进行初始化。@DanyunUIWebView
必须在主线程上初始化,以及几乎所有的UIKit类(也有一些例外,如UIImage
)。在“线程注意事项”下请说明,在后台线程上创建视图对象本身可能是可行的,但我已经根据经验验证,调度到后台线程并创建UIWebView将很快让您EXC\u BAD\u ACCESS
@MaxGabriel感谢您的解释。