3

intやfloatではなくNSIntegerやCGFloatなどの型を使用しているのは、64ビットシステムと関係があるためだと聞いています。私は自分のコード全体でそれを行っていますが、なぜそれが必要なのかまだわかりません。基本的に、64ビットシステムにもっと大きな整数が必要なのはなぜですか?

また、64ビットiPhoneなどでは将来必要になるかもしれませんが、現時点ではiOSでは必要ないと言われています。

4

2 に答える 2

5

それはすべてここで説明されています:

64ビット移行ガイドの概要

セクション64ビットの主な変更点:

ここに画像の説明を入力してください

データ型のサイズと配置

OS Xは、ILP32(整数、長整数、およびポインターが32ビット量)とLP64(整数が32ビット量、長整数とポインターが64ビット量)の2つのデータモデルを使用します。他のタイプは、対応する32ビットと同等です(size_tと、長整数またはポインターのサイズに基づいて定義される他のいくつかのタイプを除く)。

ほとんどすべてのUNIXおよびLinux実装はLP64を使用しますが、他のオペレーティングシステムはさまざまなデータモデルを使用します。たとえば、WindowsはLLP64を使用します。この場合、long long変数とポインターは64ビット量であり、long整数は32ビット量です。対照的に、CrayはILP64を使用します。ILP64では、int変数も64ビット量です。

OS Xでは、データ構造のレイアウトに使用されるデフォルトの配置は自然配置です(以下に示すいくつかの例外を除く)。自然な配置とは、構造内のデータ要素が、基になるデータ型の幅に対応する間隔で配置されることを意味します。たとえば、4バイト幅のint変数は、4バイト境界に配置されます。

このドキュメントで読むことができることはもっとたくさんあります。それは非常によく書かれています。私はあなたにそれを強くお勧めします。

于 2013-03-22T23:02:15.280 に答える
4

基本的にはこれに要約されます。CGFloat/NSInteger/ etcを使用する場合、Appleは下位互換性のない変更を加えることができ、ほとんどの場合、コードを再コンパイルするだけでアプリを更新できます。intあなたは本当にあなたのアプリを通り抜けて、とのすべての使用をチェックしたくありませんdouble

後方互換性のない変更は何ですか?多くの!

  • M68KからPowerPCへ
  • 64ビットPowerPC
  • PowerPCからx86へ
  • x86-64(これがiOSの前か後かはわかりません。)
  • iOS

CGFloat「CoreGraphicsが使用する浮動小数点型」を意味します:OSXdoubleおよびfloatiOS。を使用するCGFloatと、コードは両方のプラットフォームで機能し、パフォーマンス(iOSの場合)または精度(OS Xの場合)を不必要に失うことはありません。

NSIntegerNSUIntegerあまり明確ではありませんが、ほぼ標準のCで使用されているか、ssize_t64ビットOS Xでは十分な大きさではなく、20億を超えるアイテムのリストがある可能性があります。(署名されていないことは、方法が定義されているため、40億に増加しません。)size_tintunsigned intNSNotFound

于 2013-03-22T23:25:35.517 に答える