ios - 这些快速崩溃意味着什么?

标签 ios swift memory-management crash

我一直在尝试根据我在 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/

相关文章:

objective-c - viewDidLoad 未按预期运行

ios - 如何禁用/启用特定的 UITabBar 项目,

ios - Spotify:使用不接受重定向 URL 的 Web API 登录

ios - SKLabelNode 不改变 fontColor

java - 解决向double Arraylist添加新值时Java堆空间错误

ios - 从跨多个 View Controller 的 TableView 单元显示警报 Controller

ios - Swift 将不同类型组合成一个数组来为 UITableView 显示数据

iOS:Keychain如何保持应用程序隔离?

c++ - 关于内存池的问题

PHP:生产服务器上的内存使用率非常高,而本地计算机上的内存使用率很低