2013-04-11 2 views
1

Теперь я разрабатываю приложение Iphone, которое требует входа в систему Facebook и передачи их данных в webService и входа в мою игру. В основном моя игра управляется HTML, и она будет отображаться UIWebView в моем приложении.Предупреждение о принимаемой памяти при запуске 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

Использовать ассигнования в Инструментах + кучи => http://useyourloaf.com/blog/2011/03/08/using-heapshots-to-find-abandoned-memory.html – Peres

ответ

0
  1. Убедитесь, что ваша игра в формате HTML не имеет утечек памяти при использовании веб-браузеров на рабочем столе. Chrome Developer Tools - это удобный инструмент для этой цели. Механизм javascript, используемый UIWebView, имеет низкую производительность, вы должны тщательно оптимизировать свою игру.

  2. Попробуйте [self.webView _setDrawInWebThread: YES]; после создания UIWebView. Это частный API, способный экономить процессор и память UIWebView. Но приложение может быть отклонено App Store.

    SEL sel1 = NSSelectorFromString ([NSString stringWithFormat: @ "% @% @% @", @ "_ setDr", @ "awInWebTh", @ "read:"]);

    objc_msgSend (self.webView, sel1, YES);

поможет.

Смежные вопросы