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