写到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配置后台权限,但是结果还是一样。我只能说这个警告实在是太执着了。期望有大神帮忙解决。感谢!