2012-05-01 51 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

戴夫:在這種情況下,我會開始。使用copyWithZone複製GKSession對象的語句如下:myViewController.currentSession = [self copy];我對嗎? – Kostas