仅在启用编译器优化时才会出现的 Objective C Seg 错误

问题描述 投票:0回答:1

我在试图调试 iOS 上的一个问题时遇到了困难,这个问题似乎只在发布版本中发生,这似乎暗示优化器正在做一些与我的代码不能很好地配合的事情。 崩溃的代码是将一些二进制数据序列化到 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 语句而部署有效的代码有点令人不安。

ios objective-c iphone optimization
1个回答
0
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.