让我们看看你的代码在做什么:
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;
}