Копия объекта GKSession, реализующего copyWithZone
Я хочу сделать копию объекта GKSession и я реализую copyWithZone следующим образом:
-(id)copyWithZone:(NSZone *)zone {
GKSession *kati = [[GKSession allocWithZone: zone] init];
kati=_currentSession;
return kati;}
Тем не менее, я не беру копию исходного объекта, но ссылку на него.
Я что-то пропустил...;
Реализация copyWithZone - это способ сделать копию объекта GKSession или нет?
Заранее спасибо...!
1 ответ
Давайте посмотрим, что делает ваш код:
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;
}