2011-09-06 83 views
0

我已经创建了一个使用静态的NSSet来定义我的类的每个实例共享某些元素的类。可可释放一个静态变量

要定义这个瑟我用这个代码:

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

正如你可以看到我保留集。

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

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

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

当我确定我已经完成了这个课程时调用它?

回答

5

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

否则,如果你有使用这个变量的代码一些常见的“终点”,这将是摆脱它的地方。

+0

谢谢你,你可以看看我的编辑? – MatterGoal

+0

当然,这是可能的,但是在例如多线程场景中很容易出错。如果可能的话,我宁愿推荐重构你的代码,以便将它加入到一个实例变量中,然后你可以在完成时根据和释放来处理它。有什么特别的东西让你想要释放变量吗?它有很多数据吗? – lbergnehr

+0

它只需要20个字符串,但我正在寻找写这段代码的正确方法。我认为为这个类的每个实例创建20个字符串不是正确的方式,因此,我想采用静态变量。那么,在多线程场景中,这个实现会是一团糟? – MatterGoal

3

你不应该将其释放。正如你所说,它是由你班级的每一个实例共享的,你永远不能确定你不会创建新的实例。因此,只要您的应用程序正在运行,该设置就应该存在。