Objective-C GameKit嵌套块内存泄漏
我的iPhone游戏包含以下代码:Objective-C GameKit嵌套块内存泄漏,objective-c,memory-management,memory-leaks,objective-c-blocks,gamekit,Objective C,Memory Management,Memory Leaks,Objective C Blocks,Gamekit,我的iPhone游戏包含以下代码: [friendLeaderboardRequest_ loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) { friendLeaderboardRequest_ = nil; if (error) return; NSMutableArray* playerIDs = [NSMutableArray array]; for (G
[friendLeaderboardRequest_ loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error)
{
friendLeaderboardRequest_ = nil;
if (error)
return;
NSMutableArray* playerIDs = [NSMutableArray array];
for (GKScore* score in scores)
[playerIDs addObject:score.playerID];
[GKPlayer loadPlayersForIdentifiers:playerIDs withCompletionHandler:^(NSArray* players, NSError* error)
{
...
}];
}];
嵌套的块调用泄漏3个对象。每次,负责的帧都是-[NSXPCDecoder\u initWithRootXPCObject:
。嵌套调用导致泄漏。我已将调用移到第一个块之外,并将[NSArray arrayWithObject:[GKLocalPlayer].playerID]
作为播放器ID数组传递,将一个空块作为块传递,并且没有泄漏。我在第一个块中尝试了相同的虚拟调用,泄漏再次发生
基于这些测试,我假设泄漏是由基础库引起的。我错过什么了吗?有人遇到过类似的情况吗?
在..
代码中是否有对self
的引用?@sqreept在..
代码中有对self
的引用。但是,当我注释掉…
代码时,仍然会发生泄漏。您可以尝试将块体包装在@autoreleasepool
中。据我所知,发生在不同线程上的块可能最终会出现在一个单独的或丢失的自动释放池中。@jlujan谢谢你的提示。不幸的是,它并没有阻止泄漏。friendLeaderboardRequest\ucode>是ivar吗?如果是这样,则块的第一行包含对self
的隐式引用。