Привет всем, у меня проблемы с утечкой памяти. все от моего сохранить подсчет = 0, когда я dealloc их, но до сих пор я маркировки до утечки из следующего фрагмента кода:Проблемы с утечкой памяти
- (GKSession *) peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
inSession = [[GKSession alloc] initWithSessionID:gameSessionID displayName:nil sessionMode:GKSessionModePeer];
printf("insession alloc on Start: %i\n", [inSession retainCount]);
return inSession;
}
Об отмене сборщика сверстников, так что если вы этого не сделаете найти кого-нибудь, к которому можно подключиться, я запускаю этот код, чтобы избавиться от всего, что нужно сделать с помощью peer picker.
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker {
picker.delegate = nil;
mpicker.delegate = nil;
inSession.delegate = nil;
gameSession.delegate = nil;
if(inSession != nil) {
[self invalidateSession:inSession];
[inSession release];
inSession = nil;
}
[picker release];
picker = nil;
mpicker = nil;
[inSession release];
if(self.gameSession != nil) {
[self invalidateSession:self.gameSession];
[self.gameSession release];
self.gameSession = nil;
}
[self.gameSession release];
self.gameLabel.hidden = NO;
self.gameState = pongStateStartGame;
[gameSession release];
[inSession release];
[inSession dealloc];
[gameSession dealloc];
[mpicker dealloc];
}
Где-код утечки и я не могу понять, за жизнь мне, где. Любая помощь с этим была бы удивительно оценена.
Я удивлен, что этот код работает вообще ... есть возможность освободить inSession 3 раза с окончательным dealloc. Метод выпуска NSObject будет отменен, как только счет сохранения будет равен 0. Ваш делегат возвращает GKSession с ссылкой на владельца (+1). Я предполагаю, что класс, получающий GKSession от этого делегата, не освобождает ранее созданный GKSession. Поэтому, когда peerPickerController: sessionForConnectionType: вызывается снова, он вернет другой GKSession и потеряет отслеживание вашей предыдущей GKSession - утечки памяти. – pxl