转载自 燃烧的大叔
我们项目涉及到UIWebView和JS 互掉的小游戏,小游戏里面是由声音的。
我们的工程是 ARC 模式,我们在ARC模式下退出UIWebView的时候进行了以下操作
_gameWebView.delegate = nil;
NSURL *url = [NSURL alloc] initWithString:@""];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_gameWebView loadRequest:request];
[_gameWebView stopLoading];
[_gameWebView removeFromSuperView];
NSHTTPCookie *cook;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]){
[storage delegateCookie:cookie];
}
[[NSURLCache sharedURLCache ] removeFromCachedResponses];
并且把_gameWebView = nil 了,我们测试是消除了,但是返回上层页面,JS小游戏的音频还在播放。
为什么已经消除了,还在播放,难道还在内存里面吗?
我们分享到微信里面,发现退出之后不再播放了。
原来是 JS的问题
后来又加上了
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:"WebKitCacheModelPreferenceKey"];
[[NSUserDefaultes standardUserDefaults] setBool:NO forKey:"WebKitDiskImageCacheEnabled"];
[NSUserDefaults standardUserDefaults] setBool:NO forKey:"WebKitOfflineWebApplicationCacheEnabled"];
[NSUserDefaults standardUserDefaules] synchronize];
之后再试还是没有,不是说已经消除了吗?
我们有把 ARC改成MRC,对对象进行自己消除,打印retainCount确实为0了。返回音频不播放了。