当iOS的webView加载Html页面之后

写到webView这块,硬生生堵了好久。现将问题记录如下。

问题一:加载webView之后浏览网页,有时程序会莫名其妙奔溃,查看内存居然高达上百兆。查阅网上资料发现是因为Html里的js 导致的内存泄漏,每次打开一个连接就会把“WebKitCacheModelPreferenceKey”设置成1。 解决方法: 在webView的代理方法中写下如下语句,当然别忘记设置代理。

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"]; 
}

该方法虽然不能完全解决这个问题,但是内存占用率会显著降低。 NSUserDefaultsstandardUserDefaults用来记录下永久保留的数据非常方便,不需要读写文件,而是保留到一个NSDictionary字典里,由系统保存到文件里,系统会保存到该应用下的/Library/Preferences/gongcheng.plist文件中。

问题二:隐藏html页面的广告 解决:在浏览器中取出需要隐藏的class或id的名字。依旧在以上的代理方法中

 [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('要隐藏的内容')[0].style.display = 'none'"];
    
    [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('要隐藏的内容').hidden = true"];

问题三:禁止用户点击页面中的超链接

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    // 判断是否点击链接
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        return NO;
    }
    else
    {
        return YES;
    }
}

问题四:在升级了Xcode8之后,就会出现一些日志警告。 解决:product->Scheme - > Edit Scheme -> Arguments->Environment Variables加上 OS_ACTIVITY_MODE,值为disable。

```
Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x1214e1998) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x121306d38). One of the two will be used. Which one is undefined.
```
然后很无奈地配置了plist文件,结果当然是无效的。又听说要去target的Background Modes配置后台权限,但是结果还是一样。我只能说这个警告实在是太执着了。期望有大神帮忙解决。感谢!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术之路

Qt5 新特性

Qt 5 已经临近发布,其最大的特点就是模块化。将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加、删除各个功能类。文本简单介绍 Qt5...

43280
来自专栏WindCoder

一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

现在我们可以app.component.html用这个替换:Angular是由Google开发的AngularJS框架的新版本。它带有一个完整的重写,以及各种改...

1.5K10
来自专栏java一日一条

优化 iOS 程序性能的 25 个方法

ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存...

14140
来自专栏码生

ReactNative 面试题

今天有一个 ReactNative 的面试。 时间紧迫,临时写了几个问题,初级面试问题。 都是关键字

1K30
来自专栏施炯的IoT开发专栏

Word转PDF文档时,如何嵌入字体

在很多情况下,上传论文的Camera Ready版本时,要求提交PDF版本。下面的文章转自http://blog.csdn.net/chenyusiyuan/a...

35660
来自专栏娱乐心理测试

小程序完整demo

28250
来自专栏IMWeb前端团队

可能是史上最全的weex踩坑攻略

> 这是一篇有故事的文章 --- 来自一个weex在生产环境中相爱相杀的小码畜.. ? 故事一: Build 虽然weex的口号是一次撰写 多端运行, 但其实b...

2K100
来自专栏c#开发者

Asp.net dynamic Data web Site 之二创建第一个Web Site

Asp.net dynamic Data web Site 之二创建第一个Web Site 本专题介绍一个ASP.NET动态数据的网站的布局,其中包括这些文件...

46360
来自专栏一个会写诗的程序员的博客

bootstrap-table 前端分页,刷新事件代码实例

参考文档: http://bootstrap-table.wenzhixin.net.cn/

1.3K10
来自专栏潇涧技术专栏

Mou and StackEdit and Mathjax

本文记录使用Mou和Stackedit中出现的一些问题,使其能够正常渲染带数学公式的文章

10610

扫码关注云+社区

领取腾讯云代金券