如何在一般情况下重现 EXC_BAD_ACCESS

How to reproduce EXC_BAD_ACCESS in generic case

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

我读到 Whenever you encounter EXC_BAD_ACCESS, it means that you are sending a message to an object that has already been released。 "sending a message to an object" 是什么意思?

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

 __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 方法后立即被释放。