我应该在哪里用ARC释放静态局部变量和全局变量?

时间:2014-01-29 18:49:07

标签: ios iphone memory static automatic-ref-counting

我刚刚在我的项目中创建了一个新类,UITableViewController的子类,并注意到在方法tableView:cellForRowAtIndexPath:template中,Apple仍提供一个静态本地NSString用作单元格标识符。

我知道对于静态全局/局部变量,我们需要指定nil,因为它被认为是强大的。

所以我问自己一个问题:我应该在哪里将nil分配给静态全局变量? 和静态全局变量?

感谢答案人

4 个答案:

答案 0 :(得分:1)

“应该释放静态全局变量的位置”的简短回答是“无处”。

长答案是这样的:当您创建变量static或全局变量时,无论您的类的任何实例是否存在或被释放,您都希望它存在。简单来说,您希望static始终为您服务。因此,释放它们的唯一原因是你的程序即将退出。但是如果您的程序仍在退出,那么您也可以让操作系统为您处理清理工作,并忘记发布全局变量和静态变量。

但请注意,static和全局变量的使用应该是一个例外,而不是常态。你有充分的理由使用它们,并运用你最好的判断来决定应该是什么static。此外,您应该避免通过强引用来引用静态变量的非静态变量集合,否则您可能会创建难以发现的内存泄漏。

用作您的单元标识符的NSString的静态本地没有任何问题:它占用的内存非常少,而且不会增长,因此最终不会释放它并不是什么大问题你的程序运行。

答案 1 :(得分:0)

你不需要这样做,它永远不会被释放,因为它是全球性的,所以它没问题。

在ARC中,默认情况下将被视为强,其寿命等于应用程序生命周期。

答案 2 :(得分:0)

静态字符串是一种特殊情况,不需要释放。

答案 3 :(得分:0)

静态变量,意味着它对它指向的对象拥有强引用。

static MyClass *var;
var = [MyClass instance];

现在var始终拥有对上面分配的对象的强引用。因此它永远不会从内存中删除。

但是在一些条件之后你不再需要那个对象,那么简单 var =nil会奏效 因为现在var指向nil并且不再指向创建的object.so该对象将从内存中删除。

相关问题