我很难在 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 语句而部署有效的代码有点令人不安。