[英]Where should I release static local and global variable with ARC?
我刚刚在项目中创建了一个新类,即UITableViewController的子类,并注意到在方法tableView:cellForRowAtIndexPath:模板中,Apple仍然提供了一个静态本地NSString用作单元格标识符。
我知道对于静态全局/局部变量,我们需要分配nil,因为它被认为是强大的。
所以我问自己一个问题:我应该在哪里将nil分配给静态全局变量? 和静态全局变量?
谢谢你们的答案
对于“应该在哪里释放静态全局变量”的简短回答是“无处”。
长答案是这样的:将变量设为static
或全局变量时,无论类的任何实例是否存在或被释放,都希望它存在。 简而言之,您希望static
始终在您身边。 因此,释放它们的唯一原因是您的程序即将退出。 但是,无论如何,如果您的程序正在退出,则最好让操作系统为您处理清除操作,而不必释放全局变量和静态变量。
但是请注意,使用static
变量和全局变量应该是一个例外,而不是规范。 您有充分的理由使用它们,并根据自己的最佳判断来决定什么是static
。 此外,您应该避免通过强引用来引用静态变量中的非静态变量集合,否则可能会导致难以发现的内存泄漏。
用作单元标识符的NSString
静态本地没有什么问题:它占用很少的内存,并且不会增长,因此在程序运行结束时不释放它也没什么大不了的。
您不需要这样做,因为它是全局的,所以它永远不会被发布并且可以。
在ARC中,默认情况下将其视为强者,并且其生存期等于应用程序的生存期。
静态字符串是一种特殊情况,不需要释放。
静态变量,表示它对其指向的对象拥有强大的引用。
static MyClass *var;
var = [MyClass instance];
现在var
始终拥有对上面分配的对象的强烈引用,因此它将永远不会从内存中删除。
但是在某些情况下,您不再需要该对象,那么var =nil
就可以了。
因为现在var
指向nil并且不再指向创建的object.so该对象将从内存中删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.