안녕하세요. 모두 메모리 누수 문제가 발생했습니다. 내 내가 그들에게 할당 해제 때 카운트 = 0을 유지하지만 여전히 나는 다음과 같은 코드에서 누출을 신고하고 모든 떨어져 : 그렇게하지 않으면, 그래서 피어 선택기를 취소에메모리 누출 문제가 발생했습니다.
- (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;
}
연결할 사람을 찾으면이 코드를 실행하여 피어 선택 도구와 관련된 모든 것을 제거합니다.
- (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];
}
어딘가에는, 코드가 유출되고 난 내 인생에 대한 알아낼 수 없습니다. 어떤 도움이라도 굉장히 감사 할 것입니다.
나는이 코드가 전혀 작동하지 않는다는 것에 놀랍니다 ... 마지막 세션에서 3 회의 세션을 해제 할 가능성이 있습니다. NSObject의 release 메소드는 보유 카운트가 0이 되 자마자 취소됩니다. 대리자는 소유 참조 (+1)가있는 GKSession을 반환합니다. 내 생각 엔이 델리게이트로부터 GKSession을 가져 오는 클래스가 이전에 생성 된 GKSession을 공개하지 않는다는 것입니다. 따라서 peerPickerController : sessionForConnectionType :이 다시 호출되면 다른 GKSession을 반환하고 이전 GKSession의 누락 된 메모리 (누출 된 메모리)를 잃게됩니다. – pxl