如何在一般情况下重现 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
。
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
方法后立即被释放。
我一直在玩 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
。
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
方法后立即被释放。