1

現在、ユーザーが Facebook にログインし、そのデータを webService に渡してゲームにログインする必要がある Iphone アプリを開発しています。基本的に、私のゲームは 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) を有効にして不要なソースを自動的に解放する必要がありますが、それでもアプリでメモリ警告が表示されます。私が間違って実装しているものはありますか?ありがとう。

4

1 に答える 1

0
  1. デスクトップ Web ブラウザを使用して、HTML ゲームにメモリ リークがないことを確認します。Chrome Developer Tools は、その目的に便利なツールです。UIWebView で使用される JavaScript エンジンはパフォーマンスが低いため、ゲームを慎重に最適化する必要があります。

  2. [self.webView _setDrawInWebThread:YES] を試してください。UIWebView を作成した後。UIWebView の CPU とメモリの使用量を節約できるプライベート API です。しかし、あなたのアプリは App Store によって拒否される可能性があります。

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

    objc_msgSend (self.webView、sel1、はい);

役立ちます。

于 2013-04-12T03:49:46.990 に答える