我一直在玩 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
发送消息。
array
为 nil
因为它已声明但尚未初始化(尚未)。
您可以通过使用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/