0

GKSession オブジェクトのコピーを作成したいので、次のように copyWithZone を実装します。

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

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

それにもかかわらず、私は最初のオブジェクトのコピーではなく、それへの参照を取ります。

何か足りないのでしょうか...;

copyWithZone の実装は、GKSession オブジェクトのコピーを作成する方法ですか?

前もって感謝します...!

4

1 に答える 1

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;
} 
于 2012-05-01T19:16:00.740 に答える