首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与[UIWebView loadRequest:] -优化从iAD到带有UIWebView的视图的返回

与[UIWebView loadRequest:] -优化从iAD到带有UIWebView的视图的返回
EN

Stack Overflow用户
提问于 2011-04-11 01:02:10
回答 3查看 1.7K关注 0票数 1

我有一个包含UIWebView和iAD AdBannerView的视图。

为了优化体验和减少带宽争用,我在加载iAd“详细视图”时暂停UIWebView的网络活动,并在用户从广告中返回时恢复它。目前,我只是简单地做以下几件事:

代码语言:javascript
复制
-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{

    if (self.webView.loading) {
        [self.webView stopLoading];
        self.loadingWasInterrupted = TRUE;
    }
    return YES;
}

-(void)bannerViewActionDidFinish:(ADBannerView *)banner
{
    if (self.loadingWasInterrupted) {
        //Should use loadRequest: instead?
        [self.webView reload];
    }
}

我想知道第二次调用reload和loadRequest是否有什么不同,如果有的话,哪个更高效。

我猜reload只是让你省去了使用request对象的麻烦,而且真的做了同样的事情,但我想确定一下。文档和标题没有提供任何线索。

我知道我可以通过分析网络活动来了解发生了什么,但如果有人之前研究过这一点,或者通常理解重新加载行为是否与loadRequest完全不同,那么我将非常感谢他们的任何见解。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-19 09:01:43

好吧,这是一个相当复杂的解决方案,但我认为这个解决方案可能对你有用:

为http定义自定义协议处理程序:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i

使用NSURLProtocol作为子类。处理程序将启动一个NSURLConnection,并在数据传入客户端时将其返回(在本例中,这将是发起连接的UIWebView )。让它将自己作为观察者添加到NSNotificationCenter中,以获得“暂停”通知。

当您想要显示iAd时,您可以发送暂停通知,这将取消NSURLConnection (但不会取消NSURLProtocol,它将保持打开和加载状态,因此您的were视图将继续显示为正在加载)。

然后,当添加完成时,您可以发送一个" resume“通知(大致相同),除了在这种情况下,任何收到通知的active NSURLProtocol处理程序都将使用NSURLConnections :标头从它们停止的位置继续创建新的Range::

iphone sdk: pausing NSURLConnection?

一些注意事项:

仅当浏览支持简历标题的网站时才有效(否则您可能不得不重新启动连接,并忽略接收到的最新字节之前的数据)。

NSURLRequests的格式应该是这样的,这样它们就不会超时。(如果您想要超时,那么它应该在NSURLProtocol处理程序NSURLConnections中)。

票数 2
EN

Stack Overflow用户

发布于 2011-04-13 01:56:26

我猜在这里,但我相信重载正在做一个loadRequest:内部。如果您真的打算测试这一点,那么可以向UIWebView添加一个临时子类,并覆盖reload和loadRequest方法,以便进行日志记录。

代码语言:javascript
复制
- (void)reload
{
    NSLog(@"reload called");
    [super reload];
}

- (void)loadRequest:(NSURLRequest *)request
{
    NSLog(@"loadRequest called");
    [super loadRequest:request];
}
票数 0
EN

Stack Overflow用户

发布于 2011-04-16 21:07:40

当您调用"loadRequest“方法时,您可以像这样调用它。

代码语言:javascript
复制
[webview loadRquest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.ururl.com"]]];

但是当你调用" reload“时,你只是指示重新加载当前的请求。

因此,基本上在后一种情况下,您可以节省自己从字符串创建一个url,然后从url创建一个请求,这使得它非常方便使用。

根据功能的情况,reload本身调用loadRequest,因此基本上在效率甚至速度方面都没有区别。

然而,基本上对于你的情况和我的许多情况,我们想要的东西,但苹果没有给我们是这样的:

代码语言:javascript
复制
[webview pauseLoading];
[webview resumeLoading];

所以总而言之,使用它们中的任何一个,但是如果您像我一样懒于再次指定urlrequest,只需使用"reload“即可。

道歉

对不起,伙计们,我曾经认为reload一定是在调用loadRequest,但当我尝试NWCoder的方法时,它并没有在调用reload时调用loadRequest。但是我仍然认为重载和loadRquest使用相同的方法来加载页面

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5613314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档