【问题标题】:Cocoa release a static variableCocoa 释放一个静态变量
【发布时间】:2011-11-11 10:47:44
【问题描述】:

我创建了一个类,它使用静态 NSSet 来定义一些由我的类的每个实例共享的元素。

要定义这个 se,我使用以下代码:

myStaticSet = [[NSSet setWithObjects:
                         @"element one",
                         @"element two",
                         nil
                         ]retain];

如您所见,我保留了该集合。

我真的不明白我可以在哪里释放myStaticVariable 我很确定我不能在dealloc 中释放它...那么有没有办法释放一个静态变量?

//编辑 添加一个新的类方法来释放静态值可能是一个很好的解决方案?

+(void)cleanstatic{
    [mystatic release];
}

当我确定我完成了这门课时调用它?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    如果您正在使用静态变量并想要释放它,也许它毕竟不应该是静态的?它是否在应用程序的整个生命周期中使用?在那种情况下,我会说你不必费心发布它。

    否则,如果您有一些使用此变量的代码的通用“端点”,那将是摆脱它的地方。

    【讨论】:

    • 当然,这是可能的,但在多线程场景中很容易出错。如果可能的话,我宁愿建议重构您的代码,以便将其放入一个实例变量中,然后您可以按照该变量进行处理并在完成后释放。有什么特别的东西让你想释放变量吗?它是否包含大量数据?
    • 它只需要 20 个字符串,但我正在寻找编写此代码的正确方法。我认为为这个类的每个实例创建 20 个字符串不是正确的方法,因此,我考虑采用静态变量。那么,在多线程场景中,这个实现会是一团糟?
    • 嗯,这取决于您是否要更改变量。如果它是恒定的,你也可以做到这一点;一个常数。然后多个线程不会造成问题。如果它正在缓存您所追求的,例如,您可以使用 NSCache 来处理诸如发布其内容之类的事情(但是您必须从例如文件中加载数据)。
    【解决方案2】:

    你不应该释放它。正如您所说,它由您班级的每个实例共享,您永远无法确定您不会创建新实例。因此,只要您的应用正在运行,该集合就应该存在。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2011-07-30
      • 2013-02-09
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多