Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 改进UIWebView初始化时间_Ios_Objective C_Performance_Uiwebview - Fatal编程技术网

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毫秒)
  • 创建第一个web视图比创建后续web视图花费的时间要长得多。第一个web视图需要31-42毫秒;后续的web视图需要11毫秒。好消息是,在应用程序启动时创建第一个web视图可以更便宜地创建未来的web视图,从而避免游戏运行时40毫秒的点击。
  • 创建一个
    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在另一个线程中进行初始化。@Danyun
    UIWebView
    必须在主线程上初始化,以及几乎所有的UIKit类(也有一些例外,如
    UIImage
    )。在“线程注意事项”下请说明,在后台线程上创建视图对象本身可能是可行的,但我已经根据经验验证,调度到后台线程并创建UIWebView将很快让您
    EXC\u BAD\u ACCESS
    @MaxGabriel感谢您的解释。