2011-12-14 13 views
0

ゲームキットをCocos 2Dゲームに追加しました。正常に動作しますが、重大なメモリリークが発生します。私はこのフォーラム(および他のフォーラム)でそれに関するすべての記事を読んだが、何も助けてくれないようだ。 GKTapperのGameCenterManagerを使用しています。ゲームセンターのメモリ割り当て解除(Cocos2D)

これは、我々はリーダーボードを作成し、それを表示する方法である:

-(void)showLeaderBoard:(NSString *)lb withScore:(int)score 
{ 
GKLeaderboardViewController *leaderboardController = [[[GKLeaderboardViewController alloc] init] autorelease]; 

if (leaderboardController != nil){ 
gcVC = [[UIViewController alloc] init]; 
leaderboardController.category = lb; 
leaderboardController.timeScope = GKLeaderboardTimeScopeWeek; 
leaderboardController.leaderboardDelegate = self; 
[[[CCDirector sharedDirector] openGLView] addSubview: gcVC.view]; 
[gcVC presentModalViewController:leaderboardController animated:YES]; 
} 

} 

そして、ここで削除されます:

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController 
{ 
[gcVC dismissModalViewControllerAnimated:YES]; 
[gcVC.view.superview removeFromSuperview]; 
[gcVC release]; 
} 

あなたが活動に使われる実際のMemのを見ればリークが明らかですモニター。リーダーボードが初めて表示されたり却下されたりすると、アプリケーションのメモリ使用量は11.42MBに増加し、リーダーボードが表示されて解任されるたびに0.3MB増加します。また、ゲームセンターのリーダーボードで「今日」、「今週」、「すべての時間」の間をブラウズするたびに、別の〜0.2MBが食べられます。

答えて

0

私はコードが古く、cocos2dが独自のRootViewControllerを追加する前に使用されていたと思います。ここで私はKKGameKitHelperで使用しているコードです。

-(UIViewController*) getRootViewController 
{ 
    return (UIViewController*)((KKAppDelegate*)[UIApplication sharedApplication].delegate).rootViewController; 
} 

-(void) presentViewController:(UIViewController*)vc 
{ 
    UIViewController* rootVC = [self getRootViewController]; 
    [rootVC presentModalViewController:vc animated:YES]; 
} 

-(void) dismissModalViewController 
{ 
    UIViewController* rootVC = [self getRootViewController]; 
    [rootVC dismissModalViewControllerAnimated:YES]; 
} 

// Leaderboards 

-(void) showLeaderboard 
{ 
    if (isGameCenterAvailable == NO) 
     return; 

    GKLeaderboardViewController* leaderboardVC = [[[GKLeaderboardViewController alloc] init] autorelease]; 
    if (leaderboardVC != nil) 
    { 
     leaderboardVC.leaderboardDelegate = self; 
     [self presentViewController:leaderboardVC]; 
    } 
} 

-(void) leaderboardViewControllerDidFinish:(GKLeaderboardViewController*)viewController 
{ 
    [self dismissModalViewController]; 
    if ([delegate respondsToSelector:@selector(onLeaderboardViewDismissed)]) 
    { 
     [delegate onLeaderboardViewDismissed]; 
    } 
} 
+0

はこのCocos2DまたはKobold2Dですか?以前はKKAppDelegateを見たことがありませんでした(Cocos2D 1.1を使用)。 –

+0

これはKobold2Dのものですが、どのアプリケーションデリゲートでも動作するはずです。キャストを変更して、アプリケーションデリゲートがrootViewControllerをプロパティとして公開していることを確認してください。 – LearnCocos2D

関連する問題