2011-04-06 4 views
2

J'utilise un bloc pour faire des choses quand les données sont récupérées, mais quand est-ce que je libère le tableau que j'ai créé auparavant?Quand libérer quand utiliser "withCompletionHandler"

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; 
if (leaderboardRequest != nil) { 
    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { 
     // do stuff 
     // release leaderboardRequest here? 
    }]; 
} 
// or here? 

Il semble fonctionner sur un autre thread, donc je crains que si je libère à la fin, je pourrais interférer avec le code d'achèvement.

Répondre

1

Il est sûr de libérer le leaderboardRequest car le bloc s'assurera que la variable locale est conservée jusqu'à la fin de votre code. leaderboardRequest sera immuable, sauf si défini avec __block mais je doute que vous aurez besoin de changer la référence.

Lisez le Blocks Programming Topic.

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; 
if (leaderboardRequest != nil) { 
    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { 
     // do stuff 
     // release leaderboardRequest here? NO! 
    }]; 
} 
// Here 
[leaderboardRequest release]; 
+0

Merci - J'ai lu et compris en partie. C'est comme ça que je l'avais codé de toute façon, mais c'est bon de savoir pourquoi tu fais quelque chose! – SomaMan

+0

Je suis content de pouvoir aider. – Joe

Questions connexes