64ビットアーキテクチャのiPhoneが登場しました。 long
は64ビットになります(int
は32ビットのままです)、NSIntegerが使用されているところはすべてlong
であり、32ビットではないため64ビットになります。また、Twitterには「NSIntegerをどこでも使用してintではありません。どこでもNSIntegerを使用する必要がありますか?
32ビットを超えない値を格納する必要がある場合(たとえば、ループ回数が25回のループなど)、32ビット(少なくとも)の上位ビットが空である。
プログラムが32ビット整数で動作していた場合、整数を64ビットで使用すると、メモリを使い果たしたときのメリットはありますか?
また、64ビット整数を使用すると、32ビット整数を使用する場合とは異なる結果が生じる場合があります。したがって、NSIntegerを使用すると、iPhone 5Sでは動作しますが、古いデバイスでは動作しない場合があります。一方、intまたはlongが明示的に使用されている場合、結果はどのデバイスでも同じになります。
あなたの2番目の答え「メモリを増やすことは悪いもののように思えます」はまさに私が探していた答えのようなものです。残念ながら、私はコンピュータ科学のバックグラウンドを持っていないので、私の頭の上を完全に航海しました。 64ビットのスペースに数字「3」を格納することが実際にアプリのスピードを上げる方法を示す例がありますか?私はそれがちょうどスペースの巨大な浪費と恐ろしく非効率なように思えるJonathanに同意する。 –
これはまったく同じ 'MOV'命令です。スピードアップの原因となる小規模な操作ではなく、プロセッサーのバスに沿って流れるデータの量によって違いが生じます。それはちょうど2の代わりに4車線のハイウェイを持っていることに似ていますし、次にモンスタートラック集会を開催しようとしています。より小さなデータ(通常の車のようなもの)に合わせて、データを細かくして順番に走らせることなく、大型トラックを握ることができます。 – CodaFi
ああ、アナロジー。私はすきです。あなたのアナロジーを使って、背中に孤独な小さな子供が1人しかいない大規模なバスを運転するような、小さな数字には「長い」を使用していませんか?パックされたバスと同じ容量のスペースを占めますが、そのスペースが無駄になります。 (2番目の考えでは、私が混乱させているかもしれない)私は本当に基本的なものを掴んでいないように感じますが、同じMOV命令であっても、MOVは64ビット空間は32ビット空間に格納されるものの2倍の長さを要するだろうか? –