下面这个简单的代码在调试中工作,但在 iPhone 6 上发布失败。
XCode 6.2 (6C131e)
在最新的 64 位 iPhone 上调用 runTest 会导致 EXC_BAD_ACCESS。只有在构建优化级别设置为“更快”或更高时才会发生这种情况:-O2、-O3、-Os 或 -Ofast。所以通常在 Release 配置中。顺便说一句,当优化级别设置为“无”或“快速”时,代码运行良好:-O0 或 -O1。
#import <objc/NSObject.h>
@interface Foo : NSObject
@end
@interface Test : NSObject {
Foo *field;
}
@end
@implementation Foo
- (Foo *)bar {
return self;
}
@end
@implementation Test
- (void)runTest {
Foo *foo = [[Foo alloc] init];
field = foo;
field = nil;
[foo bar];
}
@end
请解释我为什么会发生这种情况。