2011-12-14 44 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]; 
} 

泄漏是显而易见的监控。第一次显示排行榜时,该应用程序的内存使用量增加了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)。 – 2011-12-18 12:36:47