iphone - 仅在启用编译器优化时发生的 Objective C 段错误

标签 iphone ios objective-c compiler-construction optimization

我很难尝试调试 iOS 上的一个问题,该问题似乎只出现在 Release 版本中,这似乎暗示优化器正在做一些与我的代码不兼容的事情。崩溃的代码是将一些二进制数据序列化为 NSMutableData 实例的代码,如下所示。

[_data increaseLengthBy:sizeof(CFSwappedFloat64)];
*((CFSwappedFloat64 *)[self pointerAtOffset]) = CFConvertFloat64HostToSwapped(value);
_offset += sizeof(CFSwappedFloat64);

_data 是一个 NSMutableData 实例。 pointerAtOffset和该类的init方法定义如下。

- (unsigned char *)pointerAtOffset {   
    return ((unsigned char *)_data.mutableBytes) + _offset;
}

- (id)init {
    if( self = [super init] ) {
        _data   = [[NSMutableData alloc] initWithCapacity:1028];
        _offset = 0;
    }
    return self;
}

现在奇怪的是,如果我添加 NSLog 打印语句,它会修复错误。

[_data increaseLengthBy:sizeof(CFSwappedFloat64)];
NSLog(@"%d - %d", (int)_data.mutableBytes, _offset);
*((CFSwappedFloat64 *)[self pointerAtOffset]) = CFConvertFloat64HostToSwapped(value);
_offset += sizeof(CFSwappedFloat64);

知道是什么原因造成的吗?由于 NSLog 语句而部署有效的代码有点令人不安。

最佳答案

这让我想起了 armv6 Thumb 指令问题。如果您更改调试build设置以优化为 Fastest、Smallest 并且它崩溃,那么这就是您的问题。

关于iphone - 仅在启用编译器优化时发生的 Objective C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907823/

相关文章:

objective-c - 具有多个部分时使用 sectionIndexTitlesForTableView 进行索引

iphone - 我如何在 ViewController 中使用 appDelegate 中声明的字符串?

iphone - 只有一位开发人员收到推送通知

iphone - 将 UIImagePickerController 推到左侧

iphone - iTunes文件共享-如何上传不同的文件夹?

ios - UI 更新在不同情况下表现不同

ios - 在 ScrollView 的 ContentView 中拉伸(stretch) UIView

ios - 选择单元格时,UITableView 所有组件都更改了背景颜色

objective-c - 仅下载 Cocoa 中的 HTTP header

ios - 导航栏中未显示栏按钮项