【问题标题】:Copy of GKSession object implementing copyWithZone实现 copyWithZone 的 GKSession 对象的副本
【发布时间】:2012-05-01 18:48:31
【问题描述】:

我想复制一个 GKSession 对象,并按如下方式实现 copyWithZone:

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

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

尽管如此,我没有获取初始对象的副本,而是对其进行引用。

我是不是错过了什么……;

copyWithZone 的实现是复制 GKSession 对象的方法,还是不是?

提前谢谢...!

【问题讨论】:

    标签: objective-c memory-management copywithzone


    【解决方案1】:

    让我们看看你的代码在做什么:

    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;
    } 
    

    【讨论】:

    • 戴夫首先感谢您的帮助。使用 copyWithZone 复制 GKSession 对象的语句如下: myViewController.currentSession=[self copy];我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2016-01-06
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多