我刚刚在我的项目中创建了一个新类,UITableViewController的子类,并注意到在方法tableView:cellForRowAtIndexPath:template中,Apple仍提供一个静态本地NSString用作单元格标识符。
我知道对于静态全局/局部变量,我们需要指定nil,因为它被认为是强大的。
所以我问自己一个问题:我应该在哪里将nil分配给静态全局变量? 和静态全局变量?
感谢答案人
答案 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该对象将从内存中删除。