web-dev-qa-db-ja.com

NSDouble、NSFloat、またはNSInteger以外のタイプは存在しますか?

CocoaではNSIntegerまたは通常のintを好むのですか、なぜですか?NSDoubleおよびNSFloatの言及がありましたが、参照が表示されませんすべてのドキュメントのそれら。 NSIntegerの目的がアーキテクチャの安全性である場合、doublefloatなどの他のタイプはどうですか?

36
sarunw

NSIntegerタイプのサイズは32ビットシステムと64ビットシステムで異なるため、intが存在します。 floatdoubleのサイズは同じように変化しないので、それらのラッパータイプを持つ必要はありません。

82
duskwuff

NSFloatはありませんが、一部のアーキテクチャでfloatを使用できるように、Core Graphics APIが最終的にCGFloatからdoubleに変更されたことを知っています。

APIヘッダーが宣言する正確な型を使用するのが最善です。これにより、別のターゲット用にコードを再コンパイルした場合に型の変更が自動的に行われます。

5
Kevin Grant

また、規約についてです。

Intに対するtypedefは、int int自体と互換性がありません。

例:pid_tはint型ですが、intを渡すと警告が作成されます。

どうして? APIの境界を越えた場合、コードが何を期待しているのか誰もが知っていることを確認したいからです。

Float型とdouble型、つまりNSTimeIntervalがあります。それは実際に基礎となる型に関するものではなく、従うべき慣習です。

ローカルintをループカウンターとして宣言し、それを適切に定義されたAPIに渡す予定がない場合は、intをintに呼び出しても問題ありません。

0
pmau