Memory 游戏中心内存释放(使用Cocos2D)

Memory 游戏中心内存释放(使用Cocos2D),memory,cocos2d-iphone,center,memory-leaks,Memory,Cocos2d Iphone,Center,Memory Leaks,我们刚刚在Cocos 2D游戏中添加了游戏套件。它工作正常,但会导致一些严重的内存泄漏。我已经在这个论坛(和其他论坛)上读了所有关于它的帖子,但似乎没有任何帮助。我们正在使用Gktaper的GameCenterManager 这就是我们创建领导委员会并展示它的方式: -(void)showLeaderBoard:(NSString *)lb withScore:(int)score { GKLeaderboardViewController *leaderboardController = [[

我们刚刚在Cocos 2D游戏中添加了游戏套件。它工作正常,但会导致一些严重的内存泄漏。我已经在这个论坛(和其他论坛)上读了所有关于它的帖子,但似乎没有任何帮助。我们正在使用Gktaper的GameCenterManager

这就是我们创建领导委员会并展示它的方式:

-(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。此外,每次在game center leader board中的“今天”、“本周”和“所有时间”之间浏览时,都会有约0.2MB的数据被占用。

我认为该代码很旧,在cocos2d添加自己的RootViewController之前就已经使用过了。以下是我在中使用的代码:


这是Cocos2D还是Kobold2D?我以前从未见过他。。。(使用Cocos2D 1.1)。这是Kobold2D的版本,但应该适用于任何应用程序代理。只需更改强制转换,并确保应用程序委托将rootViewController作为属性公开。
-(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];
    }
}