4

リリース ビルドでのみ発生すると思われる 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 print ステートメントを追加すると、バグが修正されます。

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

これを引き起こしている可能性のあるアイデアはありますか?NSLog ステートメントのおかげで機能するコードをデプロイするのは、ちょっと不安です。

4

1 に答える 1

0

これは、armv6 Thumb 命令の問題を思い出させます。デバッグ ビルド設定を Fastest, Smallest に最適化するように変更してクラッシュした場合、それが問題です。

于 2013-02-21T05:24:10.427 に答える