我想复制一个GKSession对象,并按照以下方式实现copyWithZone:
-(id)copyWithZone:(NSZone *)zone {
GKSession *kati = [[GKSession allocWithZone: zone] init];
kati=_currentSession;
return kati;}
尽管如此,我并没有把初始对象的副本作为参考。
我错过了什么......;
copyWithZone的实现是否可以复制GKSession对象?
提前致谢......!
答案 0 :(得分: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;
}