Search code examples
iosgame-centermultiplayer

Why iOS GameCenter multiplayer real-time match each time creates new threads?


I created absolutely simple multiplayer app which just finds the match (with only 1 opponent) and terminates it in 5 seconds:

-(void)matchmakerViewController:(GKMatchmakerViewController *)viewController 
                   didFindMatch:(GKMatch *)match {

    [self.presentingViewController dismissModalViewControllerAnimated:YES];

    self.match = match;
    self.match.delegate = self;

    if (!self.matchStarted && self.match.expectedPlayerCount == 0)
    {
        NSLog(@"Ready to start match!");
        //[self lookupPlayers];

        // My Own Test Code Begin

        if (!self.delegate) NSLog(@"No delegate on match invite.");

        // Notify delegate match can begin
        self.matchStarted = YES;
        [self.delegate matchStarted];

        // My Own Test Code End
    }
}

And some methods in AppDelegate:

-(void)matchStarted
{
    CCLOG(@"Match started. Delay 5 seconds...");

    [self performSelector:@selector(matchEnded) withObject:nil afterDelay:5];
}

-(void)matchEnded
{
    CCLOG(@"Match ended");

    [[GameCenterMatchHelper sharedInstance].match disconnect];
    [GameCenterMatchHelper sharedInstance].match = nil;
}

All works fine for the first match. But when the match is finished there are 3 additional threads (I can see them pausing execution):

  1. Thread com.apple.gamekitservices.gcksession.recvproc
  2. Thread com.apple.gamekitservices.gcksession.sendproc
  3. Thread com.apple.gamekitservices.eventcallback.eventcbproc

And if I start two matches - there are already 6 (3 and 3) threads after match finish. And the main reason why it is so bad - app crashes and it is like all players are disconnected.

I use iPod touch 4g and iPad 2 for tests with the newest iOS 6. And these threads are created at both devices.

I thought it is because I use a singleton-class for GCHelper and all delegates but I tryed to extract delegates to other one-time-using classes - each time the additional threads appear.

Maybe smb know how can I fix it?


Solution

  • the right answer is that XCode doesn't show a real thread picture. It shows a lot of different threads but if I try to see them in profiler then I understand there are no additional threads. So I should suggest, no problem with threads but there is a problem with debug process. As a topic starter I think it is closed. Thank you all.