Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 若我们在对象上调用autorelease,它在运行时崩溃的方式和原因是什么?_Ios_Objective C - Fatal编程技术网

Ios 若我们在对象上调用autorelease,它在运行时崩溃的方式和原因是什么?

Ios 若我们在对象上调用autorelease,它在运行时崩溃的方式和原因是什么?,ios,objective-c,Ios,Objective C,我想,若我们调用对象上的自动释放,它会减少保留计数,当最后池耗尽时,它会从自动释放池中清除对象。但当在对象上调用autorelease时,它如何在运行时崩溃。任何人都可以举例说明。在MRR/MRC下,程序员负责保留和释放对象。如果保留的数量多于释放的数量,则对象保持活动状态,当释放的数量与保留的数量匹配时,则对象将被释放,如果在此之后执行进一步的释放,则可能发生崩溃 自动释放只是一个延迟发布,所以它可能会像发布一样导致崩溃。例如,样本时间线: 创建/保留对象 使用对象 Autorelease对象

我想,若我们调用对象上的自动释放,它会减少保留计数,当最后池耗尽时,它会从自动释放池中清除对象。但当在对象上调用autorelease时,它如何在运行时崩溃。任何人都可以举例说明。

在MRR/MRC下,程序员负责保留和释放对象。如果保留的数量多于释放的数量,则对象保持活动状态,当释放的数量与保留的数量匹配时,则对象将被释放,如果在此之后执行进一步的释放,则可能发生崩溃

自动释放只是一个延迟发布,所以它可能会像发布一样导致崩溃。例如,样本时间线:

创建/保留对象

使用对象

Autorelease对象-存储在池中供以后发布的对象

继续使用对象-很好,因为它仍然活着

释放对象-对象被释放,占用的内存可以重用

池被清空,现在引用长死对象的对象指针被传递到release。。。轰

这只是一种情况,还有其他情况,例如自动删除对象的次数太多(超过保留的次数)


这就是方法。要解决此问题,请仔细检查手动内存管理,或自动切换到ARC,只需手动处理以避免泄漏。

跟踪手动保留计数问题可由“静态分析器”完成“在Xcode中。它解释了内存出现问题的原因和位置。运行它并解决问题。

可以显示代码吗?为什么不使用ARC?自动释放不会减少保留计数。它会将对象放入自动释放池中。”。