繁体   English   中英

我应该在哪里使用ARC发布静态局部和全局变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM