Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该在哪里释放带有ARC的静态局部和全局变量?_Ios_Iphone_Memory_Static_Automatic Ref Counting - Fatal编程技术网

Ios 我应该在哪里释放带有ARC的静态局部和全局变量?

Ios 我应该在哪里释放带有ARC的静态局部和全局变量?,ios,iphone,memory,static,automatic-ref-counting,Ios,Iphone,Memory,Static,Automatic Ref Counting,我刚刚在我的项目中创建了一个新类UITableViewController的子类,并注意到在tableView:cellForRowAtIndexPath:template方法中,Apple仍然提供一个静态本地NSString用作单元格标识符 我知道,对于静态全局/局部变量,我们需要指定nil,因为它被认为是强的 所以我问自己这样一个问题:我应该在哪里给静态全局变量赋值? 和静态全局变量 谢谢你的回答,伙计们,你不需要这么做,它永远不会发布,因为它是一个全球性的 默认情况下,ARC将被视为强函数

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

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

所以我问自己这样一个问题:我应该在哪里给静态全局变量赋值? 和静态全局变量


谢谢你的回答,伙计们,你不需要这么做,它永远不会发布,因为它是一个全球性的


默认情况下,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
变量。感谢您的解释;)