質問

私は64ビットで動作するアプリケーションを変換しています。アップルのドキュメントはCGFloatタイプは、32ビットと64ビットでfloatdoubleされている状態。

それがそうであるならば、

、どのように値のエンコード/デコードを処理していますか?例えば、NSNumberからCGFloatを作成する場合は、私がするNSNumberの-numberWithFloat:または-numberWithDouble:メソッドを使用する必要がありますか?同じ質問はNSCoderNSKeyedArchiver方法の-encodeFloat:forKey:-encodeDouble:forKey:に適用されます。

その-numberWithFloat:は64ビットで、32ビットおよび-numberWithDouble:に呼び出されたので、私は条件付きマクロを記述する必要がありますか?

APPの64ビットバージョンを実行して、ユーザがこれらの値はダブルとして符号化されたファイルは、32ビットシステム上/アーカイブされていない開いているファイルを保存した場合、

はどうなりますか?

CGFloatsを使用する私のアプリでは、

すべての方法は、これまでdoubleの精度レベルを必要とする可能性は低いので、私もこれを心配すべきですか?

役に立ちましたか?

解決

  APPの64ビットバージョンを実行して、ユーザがこれらの値はダブルとして符号化されたファイルは、32ビットシステム上/アーカイブされていない開いているファイルを保存した場合、

はどうなりますか?

何も特別。ファイルには、doubleが含まれている、とあなたがdecodeDouble:forKey:を取得しますので、おそらくあなたは、値を取得するためにdoubleを送っています。あなたはそれがCGFloat-たためにあなたは32ビットマシンにしている場合には精度を失うことになるキャストすることはできますが、遅かれ早かれそのキャストを行う必要があります。 (あなたがdouble上に保持している場合でも、あなたはまだあなたがクォーツ/のAppKit / UIKitのに値を渡すときCGFloatにキャストする必要があります。)

の代替を考えてみましょう:あなたは64ビットマシン上のファイルにfloatsを保存し、その後、同じマシン上でのバックファイルをロードします。あなたがファイルを書いたとき、あなたがそれを捨てたので、あなたとQuartzは、64ビットのdoubleタイプの完全な精度を扱うことができますが、それを持っていません。値はキャストでは全く変更した場合、その変更は今永久的です。

だから私のお勧めは、あなたがのことはありませんのはdouble以外のものを(すなわち、ターゲットAPIのみfloatを使用し、決してfloat)を使用しようとしていることを知っている限り、常に、NSKeyedArchiverとdoubleタイプを使用することです。 CGFloatため、doubleを使用するので、これは、クォーツの真実ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top