我一直在尝试根据我在 Crashlytics 中看到的日志来调试应用程序中的一些问题。我经常遇到日志崩溃的情况。
libswiftCore.dylib -> swift_unknownRetain_n + 44
libswiftCore.dylib -> swift_unknownRelease + 24
在这两种情况下,抛出的异常都是 EXC_BAD_ACCESS KERN_INVALID_ADDRESS。
我主要在使用 block 时看到它们。我知道这些是段错误,但是 ARC 不应该优雅地处理内存管理以防止这些错误吗?还是我遗漏了一些关键点?
最佳答案
此崩溃主要是由于内存泄漏造成的。当任何变量或对象尝试访问受限内存时,就会发生崩溃。有时,在没有通知的情况下,我们会尝试访问已释放的对象(在这种情况下也可能发生崩溃)。是的,在大多数情况下 ARC 会处理内存。你不用担心。请检查您是否正在访问受限内存。
block 问题: 你在这里发现了一个关键的事情。 block 的使用。是的,使用 block 时有可能出现此错误。如果你使用一个对外部对象有强引用的 block ,而该外部对象也对该 block 有强引用,则会出现内存泄漏。当您的 block 尝试访问另一个对象(第三个角色)时,您可能会认为所有对象都在同一范围内并且同时处于事件状态。但不幸的是,第三个角色可能会被取消分配。 (对第三个角色的引用必须很弱)
关于ios - 这些快速崩溃意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43884109/