あなたのコードが何をしているか見てみましょう:
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;
}