2013-05-28 7 views
7

したがって、NSIntegerとintをどれだけ気にするべきかを判断しようとしています。私はCSの学位を持っていないので、これらの型変換の引数の多くはかなりわかりにくいです。私が知る限り、引数は "iOSのintの代わりにNSIntegerを使用することで、最終的に64ビットのIOSが出てきたら、あなたの変数はポインタを格納するのに適したサイズになります。"けっこうだ。私は私のintsにポインタを格納していることを除いてほぼ決してありません。NSIntegerとiOS上の64ビットアーキテクチャ

私は、ジャックに頼っている魔法の豆の数を格納しているintと、猫をスキンにする方法の数を格納している別のintを持っていると仮定し、それらを関数間で渡して、 Appleは64ビットのiOSをリリースする - 何が変わる?なぜ私は気にしますか?

また、私が気にしているのであれば、NSIntegerの代わりにint32_tを使用する理由は何ですか? のように、が物事を予測可能にする方法になると思われます。

+0

猫の皮膚を作る方法の数は、簡単に32ビットを超える場合があります。ヘック、64ビットでさえ十分ではないかもしれません;-) ;-) ;-) – dasblinkenlight

+0

NSIntegerのポイントを理解したことはありません...もしNSObject(NSNumberのような)だったら、それを理解できました...個人的に私はクロスプラットフォームの互換性を損なうため、NSIntegerを使用しません... – Goz

+3

@dasblinkenlight - それは猫ではない、それは犬だ。開発者が「int」と「short」を離れ、その後「long」を解釈に開放したCの開発の早い段階で、ネジ止めが行われました。そして、再解釈。そして、再解釈。そして...それをまっすぐにしようとするすべての試みは、別の犬を乱用するように見える。私が理解しているように、Objective-C/Cocoaの人々は、他のint変種とは独立して、その型のサイズを制御できるようにNSIntegerを考案したので、宣言されたインタフェースは他の定義が変更されても無害になります(またはその逆) –

答えて

5

C99の<stdint.h>ヘッダーのタイプを使用することについてのポイントは、絶対的に有効です。これらのタイプでは、インテグラルタイプのサイズをより詳細に制御できます。しかし、NS -prefixed integral型は、<stdint.h>の標準化に先立って、抽象的な抽象セットを導入しています。

私はNS -prefixed integral typesをココアのメソッドとやり取りするときに使用します。たとえば、CocoaメソッドがNSUintegerを返した場合、私はNSUinteger型を使って変数を宣言します。

私は、格納されたデータのサイズを正確に制御する必要があるときに、私のプログラムの変数に<stdint.h>の型を使用します。コアデータに終わる項目はこのカテゴリに含まれます。

例えば、forループでループ制御変数が必要な場合など、整数型のサイズが問題にならない場合は、intを使用します。

2

私の推薦:

  • のObj-Cのコードを書く、NSIntegerを使用しています。その後、使用するフレームワークに準拠します。 intから別のもの(int64_t,long、?)に一度変更される可能性があります。

  • 明らかにC/C++コード(移植性)を書く場合を使用しない場合NSIntegerを使用してください。

あなたの変数は、(constとして。hereをご確認ください)INT_MAXを超えてしまうと思うなら、あなたがメモリのオブジェクトを共有していない場合は、int64_t(あなたが32/64ビット柔軟なコードを持っているしたい場合)またはlongを(使用する場合がありますアプリの32/64ビットバージョン間)。また、varsにマイナスの値がないことがわかっているときは、符号なしタイプ(uintuint64_t)の使用を検討してください。

内部:ポインタの場合は、intを使用しないでください。 void *

関連する問題