我现在正在开发一个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)来自动释放一些不需要的源,但我仍然会在我的应用程序中收到内存警告。有什么我实施错误? 感谢。
答案 0 :(得分:0)
使用桌面网络浏览器确保您的HTML游戏没有内存泄漏。 Chrome开发者工具是一种方便的工具。 UIWebView使用的javascript引擎性能很差,你应该仔细优化你的游戏。
尝试[self.webView _setDrawInWebThread:YES];在创建UIWebView之后。它是一个私有API,能够保存UIWebView的CPU和内存使用。但您的应用可能会被App Store拒绝。
SEL sel1 = NSSelectorFromString([NSString stringWithFormat:@“%@%@%@”,@“_ setDr”,@“awInWebTh”,@“read:”]);
objc_msgSend(self.webView,sel1,YES);
会有所帮助。