如何在通用情况下重现EXC_BAD_ACCESS

时间:2017-02-26 13:29:49

标签: ios objective-c exc-bad-access

我一直在使用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。短语"向对象发送消息"是什么意思?

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

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

1 个答案:

答案 0 :(得分:1)

您要将insert:atIndex:发送给array

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

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

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

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