Копия объекта 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;
} 
Другие вопросы по тегам