Objective C Seg仅在启用编译器优化时才会出现故障

时间:2013-02-16 06:54:11

标签: 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 print语句,它就可以修复bug。

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

任何可能导致此问题的想法?部署因NSLog语句而起作用的代码是令人不安的。

1 个答案:

答案 0 :(得分:0)

这让我想起了armv6 Thumb指令的问题。如果您将调试版本设置更改为最快,最小并且崩溃,那么这就是您的问题。