我有一个包含UIWebView和iAD AdBannerView的视图。
为了优化体验和减少带宽争用,我在加载iAd“详细视图”时暂停UIWebView的网络活动,并在用户从广告中返回时恢复它。目前,我只是简单地做以下几件事:
-(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完全不同,那么我将非常感谢他们的任何见解。谢谢。
发布于 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中)。
发布于 2011-04-13 01:56:26
我猜在这里,但我相信重载正在做一个loadRequest:内部。如果您真的打算测试这一点,那么可以向UIWebView添加一个临时子类,并覆盖reload和loadRequest方法,以便进行日志记录。
- (void)reload
{
NSLog(@"reload called");
[super reload];
}
- (void)loadRequest:(NSURLRequest *)request
{
NSLog(@"loadRequest called");
[super loadRequest:request];
}发布于 2011-04-16 21:07:40
当您调用"loadRequest“方法时,您可以像这样调用它。
[webview loadRquest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.ururl.com"]]];但是当你调用" reload“时,你只是指示重新加载当前的请求。
因此,基本上在后一种情况下,您可以节省自己从字符串创建一个url,然后从url创建一个请求,这使得它非常方便使用。
根据功能的情况,reload本身调用loadRequest,因此基本上在效率甚至速度方面都没有区别。
然而,基本上对于你的情况和我的许多情况,我们想要的东西,但苹果没有给我们是这样的:
[webview pauseLoading];
[webview resumeLoading];所以总而言之,使用它们中的任何一个,但是如果您像我一样懒于再次指定urlrequest,只需使用"reload“即可。
向道歉
对不起,伙计们,我曾经认为reload一定是在调用loadRequest,但当我尝试NWCoder的方法时,它并没有在调用reload时调用loadRequest。但是我仍然认为重载和loadRquest使用相同的方法来加载页面
https://stackoverflow.com/questions/5613314
复制相似问题