Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
ARC中的iOS非零引用计数,无法解除锁定_Ios_Objective C_Automatic Ref Counting_Dealloc - Fatal编程技术网

ARC中的iOS非零引用计数,无法解除锁定

ARC中的iOS非零引用计数,无法解除锁定,ios,objective-c,automatic-ref-counting,dealloc,Ios,Objective C,Automatic Ref Counting,Dealloc,大家好 我正在尝试在ARC模式下解除锁定ViewController。 但是,RefCount始终为非零 我已尝试将所有对象设置为nil,并将所有子视图设置为removeFromSuperview+nil; 和定时器,使+nil失效; 计数器仍然为2 有没有办法跟踪哪一个指针仍在保留中 谢谢比利,你为什么要这么做?使用ARC时,您可能不必担心取消分配。当没有对控制器的引用时,控制器将自动解除分配。是的,视图不引用控制器,它们由控制器引用!因此,删除该视图不会影响控制器的保留计数。如果您确实想从内

大家好

我正在尝试在ARC模式下解除锁定ViewController。 但是,RefCount始终为非零

我已尝试将所有对象设置为nil,并将所有子视图设置为removeFromSuperview+nil; 和定时器,使+nil失效; 计数器仍然为2

有没有办法跟踪哪一个指针仍在保留中


谢谢比利,你为什么要这么做?使用ARC时,您可能不必担心取消分配。当没有对控制器的引用时,控制器将自动解除分配。是的,视图不引用控制器,它们由控制器引用!因此,删除该视图不会影响控制器的保留计数。如果您确实想从内存中删除视图控制器,请将其从父视图控制器中删除,并将所有链接设置为nill。

如果您使用的是块,您也可以在那里创建retain cycle。例如,一个块被一个对象引用,在这个块中,您正在引用对象或调用对象的实例方法。 保留计数不下降到0的另一个选项是,您已将abject注册为通知的观察者

您可能会发现这个答案很有用:

apple文档中的强引用循环示例:

self.block = ^{
        [self doSomething];    // capturing a strong reference to self
                               // creates a strong reference cycle
    };

谢谢你的建议。因为内存一直很高,我想释放内存,所以我尝试在dealoc中设置一个断点,但不知怎么的,它没有被调用。这意味着我有一些指向控制器的“隐藏”指针。这是很难找到它所有…是的,这可能是问题,我已经做了很多块之间。。。是否有任何快速搜索来找出哪个块保留控制器?它是您在对象中保留引用的块。苹果文档中很好地展示了这一点:“捕获自我时避免强引用循环”self.block=^{[self doSomething];//捕获自我的强引用//创建强引用循环};如果存在块的retain循环,编译器将抛出警告。如果编译器能够识别这种情况,编译器将抛出警告,但它不能总是这样做。当然,你需要打开警告!!!