ios - 如何在一般情况下重现 EXC_BAD_ACCESS

标签 ios objective-c exc-bad-access

我一直在玩 Objective-C,并试图有目的地让 EXC_BAD_ACCESS 崩溃。有哪些确定的方法可以实现这一目标?

我读到每当遇到 EXC_BAD_ACCESS 时,就意味着您正在向已释放的对象发送消息。 “向对象发送消息”这个短语是什么意思?

我试图实现崩溃但没有成功的东西:

 __weak NSMutableArray *array;
    NSLog(@"%@", array)
    [array insertObject:@2 atIndex:0];
    NSLog(@"%@", array.firstObject)

最佳答案

您正在将 insert:atIndex: 发送到 array

代码不会崩溃,因为在 Objective-C 中它允许向 nil 发送消息。

arraynil 因为它已声明但尚未初始化(尚未)。


您可以通过使用assign 属性声明对象属性来重现崩溃

@property (assign) NSMutableArray *array;

然后创建一个方法

- (void)insertSomething {
    self.array = [NSMutableArray array];
    [self.array insertObject:@2 atIndex:0];
}

并调用它

[self insertSomething];
NSLog(@"%@", self.array.firstObject);

由于 assign 属性 array 是一个弱引用,并且在离开 insertSomething 方法后立即被释放。

关于ios - 如何在一般情况下重现 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42469108/

相关文章:

ios - 如何将 AFNetworking 请求打印为 RAW 数据

ios - Swift/popViewControllerAnimated 抛出 nil/如何返回到上一个 viewController?

iphone - iPhone 版 pdf 阅读器

crash - UINavigationController 由于推送和弹出 UIViewController 而崩溃

调用 stopDeviceMotionUpdates() 后抛出 iOS CoreMotion.MotionThread EXC_BAD_ACCESS

ios - EXC_BAD_ACCESS 当安全地展开 NSManagedObject 上的可选内容时

ios - Firebase 不会报告 iOS 中的所有崩溃,而 Xcode 10 会报告所有这些崩溃,我们能否以某种方式在 firebase 上跟踪所有这些崩溃?

ios - Spotify iOS SDK 返回 SPTListPage.items 返回 nil

ios - 使用 Storyboard的 UItableView 的空网格

objective-c - addSubView 上令人讨厌的 iOS SIGABRT 错误 - 即使在以前工作的旧快照和备份版本上也是如此?