发布中的简单代码中的EXC_BAD_ACCESS

时间:2015-04-07 15:30:19

标签: ios iphone xcode release iphone-64bit

下面这个简单的代码适用于调试,但在iPhone 6上的发布失败。

XCode 6.2(6C131e)

调用runTest会在最新的64位iPhone上导致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

请解释一下为什么会这样。

1 个答案:

答案 0 :(得分:0)

我向Apple Bug Reporter发布了问题,但Apple曾经要求提供更多细节,然后再也没有回复。现在问题报告已经完全消失了。

顺便说一下,这似乎适用于clang,版本7.3。