Ios 我应该在哪里释放带有ARC的静态局部和全局变量?
我刚刚在我的项目中创建了一个新类UITableViewController的子类,并注意到在tableView:cellForRowAtIndexPath:template方法中,Apple仍然提供一个静态本地NSString用作单元格标识符 我知道,对于静态全局/局部变量,我们需要指定nil,因为它被认为是强的 所以我问自己这样一个问题:我应该在哪里给静态全局变量赋值? 和静态全局变量Ios 我应该在哪里释放带有ARC的静态局部和全局变量?,ios,iphone,memory,static,automatic-ref-counting,Ios,Iphone,Memory,Static,Automatic Ref Counting,我刚刚在我的项目中创建了一个新类UITableViewController的子类,并注意到在tableView:cellForRowAtIndexPath:template方法中,Apple仍然提供一个静态本地NSString用作单元格标识符 我知道,对于静态全局/局部变量,我们需要指定nil,因为它被认为是强的 所以我问自己这样一个问题:我应该在哪里给静态全局变量赋值? 和静态全局变量 谢谢你的回答,伙计们,你不需要这么做,它永远不会发布,因为它是一个全球性的 默认情况下,ARC将被视为强函数
谢谢你的回答,伙计们,你不需要这么做,它永远不会发布,因为它是一个全球性的
默认情况下,ARC将被视为强函数,其生存期等于应用程序的生存期。静态字符串是一种特殊情况,不需要释放。对于“静态全局变量应在何处释放”的简短回答是“无处释放” 长答案是这样的:当您创建一个变量
static
或global时,您希望它存在,而不管您的类的任何实例是否存在或被释放。简单地说,您希望您的static
s始终在您身边。因此,释放它们的唯一原因是您的程序即将退出。但是,如果您的程序正在退出,您也可以让操作系统为您处理清理,而忘记释放全局变量和静态变量
但是,请注意,静态
和全局变量的使用应该是例外,而不是规范。您使用它们有很好的理由,并运用您的最佳判断来决定什么应该是静态的
。此外,您应该避免通过强引用从静态变量引用非静态变量集合,因为否则可能会造成难以发现的内存泄漏
用作单元格标识符的NSString的静态局部变量没有什么问题:它占用很少的内存,而且不会增长,因此在程序运行结束时不释放它也没什么大不了的。静态变量意味着它持有对它指向的对象的强引用
static MyClass *var;
var = [MyClass instance];
现在var
始终保持对上述分配对象的强引用。因此它永远不会从内存中删除
但在某种情况下,你不再需要那个物体,然后
var=nil
将起作用。因为现在
var
指向nil,不再指向创建的对象。因此该对象将从内存中删除。并且在全局或局部静态的情况下,它不会阻止释放我的tableView?@Dabrut除非该全局或静态直接或间接引用您的tableView
。另一方面,tableView
,在其实现中允许有尽可能多的static或global:只要对视图的引用不存储在其中一个中,表视图的实例可以随心所欲地来来去去。很抱歉,我指的是我的UITableViewController,而不是我的uitableview@Dabrut相同的处理:静态变量的存在,无论是在方法内部还是外部,都不会阻止相应对象的实例被释放,除非变量指向其中一个实例,并且也是\uu strong
变量。感谢您的解释;)