何时使用“withCompletionHandler”释放

时间:2011-04-06 13:10:48

标签: objective-c

我在获取数据时使用块来执行操作,但是何时释放我之前创建的数组?

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

它似乎适用于另一个线程,所以我担心如果我在最后发布它,我可能会干扰完成代码。

1 个答案:

答案 0 :(得分:1)

释放leaderboardRequest是安全的,因为该块将确保在代码完成之前保留局部变量。除非用__block定义,否则leaderboardRequest将是不可变的但我怀疑你需要更改引用。

阅读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];