Давайте посмотрим на то, что ваш код делает:
GKSession *kati = [[GKSession allocWithZone: zone] init];
Вы выделяете новый объект GKSession
и обновляет переменную kati
, чтобы указать на объект.
kati=_currentSession;
Вы можете изменить переменную kati
, чтобы указать на другой объект. Это означает, что объект, который вы только что выделили, просочился; у вас больше нет указателя на него, но он никогда не был освобожден.
return kati;
Вы возвращаетесь значение kati
переменной, которая является указателем на _currentSession
объекта.
Это явно не то, что вы хотите. Вы хотите создать новый GKSession
с той же базовой информацией, что и _currentSession
, не так ли? В этом случае я бы начал с:
- (id)copyWithZone:(NSZone *)zone {
NSString *sessionID = [_currentSession sessionID];
NSString *name = [_currentSession displayName];
GKSessionMode sessionMode = [_currentSession sessionMode];
GKSession *kati = [[GKSession alloc] initWithSessionID:sessionID displayName:name sessionMode:mode];
return kati;
}
Дэйв прежде всего за вашу помощь. Заявление о создании копии объекта GKSession с использованием copyWithZone выглядит следующим образом: myViewController.currentSession = [self copy]; Я прав? – Kostas