Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 释放一个静态变量_Objective C_Cocoa - Fatal编程技术网

Objective c 释放一个静态变量

Objective c 释放一个静态变量,objective-c,cocoa,Objective C,Cocoa,我创建了一个类,该类使用静态NSSet来定义我的类的每个实例共享的一些元素 要定义此se,我使用以下代码: myStaticSet = [[NSSet setWithObjects: @"element one", @"element two", nil ]retain]; 如你所见,我保留了这一

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

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

myStaticSet = [[NSSet setWithObjects:
                         @"element one",
                         @"element two",
                         nil
                         ]retain];
如你所见,我保留了这一套

我真的不明白我在哪里可以发布myStaticVariable我很确定我不能在DealLocal中发布它。。。那么有没有办法释放静态变量呢

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

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

当我确定我已经学完这门课的时候再叫它

如果您正在使用一个静态变量并希望释放它,那么它可能根本就不应该是静态的?它是否在应用程序的整个生命周期中使用?在这种情况下,我会说你不必费心发布它


否则,如果使用此变量的代码有一些通用的“端点”,那么就可以将其删除。

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

当然,这是可能的,但在例如多线程场景中,它很容易出错。如果可能的话,我建议您重构代码,以便将其转换为一个实例变量,这样您就可以在处理完后按照该实例变量进行处理并发布。有没有什么特别的东西让你想要释放这个变量?它包含大量数据吗?它只需要20个字符串,但我正在寻找编写此代码的正确方法。我认为为这个类的每个实例创建20个字符串不是正确的方法,因此,我认为采用静态变量。因此,在多线程场景中,这个实现将是一个大混乱?这取决于您是否要更改变量。如果它是常数,你也可以这样做;常数。那么多个线程就不会产生问题。如果它正在缓存你想要的东西,比如说,你需要NSCache来处理诸如释放内容之类的事情,但是你必须从文件中加载数据。