繁体   English   中英

运行UIWebView时收到内存警告

[英]Received memory warning when running UIWebView

我现在正在开发一个Iphone应用程序,该应用程序要求用户登录Facebook并将其数据传递给webService并登录到我的游戏。 基本上,我的游戏是通过HTML运行的,它将通过UIWebView在我的应用中显示。

这是我加载webView的代码:

-(void)callWebView {
self.webView.delegate = self;
NSURL *url = [NSURL URLWithString:@"http://www.my_game_url"];
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestURL];
}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;

if ( [ urlString isEqualToString: @"http://my_game_logout_url" ] ) {

    [myWebView stopLoading];
    [self.webView removeFromSuperview];

    MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    [appDelegate.session closeAndClearTokenInformation];
    [FBSession.activeSession close];

    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies]) {
        [storage deleteCookie:cookie];
    }
    [[NSUserDefaults standardUserDefaults] synchronize];

    return NO;
    }
return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[self.webView stopLoading];

MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.session closeAndClearTokenInformation];
[FBSession.activeSession close];
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
webView.delegate = nil;
[webView stopLoading];
}

- (void)dealloc {
[webView setDelegate:nil];
}

使用UIWebView运行我的游戏很好。 问题是我稍后会收到内存警告 ,并且我的应用程序将崩溃。 我必须启用自动引用计数(ARC)来自动释放一些不需要的源,但是我的应用程序中仍然会收到内存警告。 我有什么实施错误的地方吗? 谢谢。

  1. 通过使用桌面Web浏览器,确保您的HTML游戏没有内存泄漏。 Chrome Developer Tools是用于此目的的便捷工具。 UIWebView使用的JavaScript引擎性能较差,您应该仔细优化游戏。

  2. 尝试[self.webView _setDrawInWebThread:YES]; 创建UIWebView之后。 这是一个私有API,能够节省UIWebView的CPU和内存使用量。 但是您的应用可能已被App Store拒绝。

    SEL 1 = NSSelectorFromString([NSString stringWithFormat:@“%@%@%@”,@“ _ setDr”,@“ awInWebTh”,@“ read:”]);

    objc_msgSend(self.webView,sel1,是);

会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM