2012-05-01 3 views
0

Я хочу сделать копию объекта GKSession и я реализую copyWithZone следующим образом:Копия объекта GKSession реализующего copyWithZone

-(id)copyWithZone:(NSZone *)zone { 

GKSession *kati = [[GKSession allocWithZone: zone] init]; 
kati=_currentSession;  
return kati;}  

Тем не менее, я не беру копию исходного объекта, а ссылку на что ,

Я пропустил что-то ...;

Реализация copyWithZone - это способ сделать копию объекта GKSession или нет?

Заранее спасибо ...!

ответ

0

Давайте посмотрим на то, что ваш код делает:

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; 
} 
+0

Дэйв прежде всего за вашу помощь. Заявление о создании копии объекта GKSession с использованием copyWithZone выглядит следующим образом: myViewController.currentSession = [self copy]; Я прав? – Kostas