NSNumberとNSIntegerの違いは何ですか?私が知るべきこれらのプリミティブがありますか?フロートのためのものはありますか?NSNumberとNSIntegerの違いは何ですか?
答えて
既存の回答は便利です。彼らに追加:
はい、NSUInteger
はNSInteger
の倍の正の整数の間で範囲を与えるが、私は2つの間で選択するための別の重要な理由は、負の値は、単に意味をしない場合を区別するだけだと思います。
例:はNSArray
のcount
メソッドの戻り値は、我々は要素の負の数の配列を持つことができないので、理にかなってNSUInteger
、です。符号器が符号なしであることを知っている場合、符号化されたケースでは、シフトなどのビット演算を含む信頼性の低い演算を実行する自由度が高くなります。 This blog postは、署名されたものと署名されていないものについて詳しく述べています。
私の推測についてCGFloat
(存在しない)NSFloat
対:それはNeXTStepの名前のコード要素の設計者は、単に時間の外に、あまりにも多くの浮動小数点値を指定する必要はありませんでした場合であるかもしれません間隔。だから彼らはNSTimeInterval
を与えました。これは浮動小数点型ですが、それは明らかに時間間隔での使用を意図しています。そして、率直に言って、あなたが構造体を扱うことなく常に秒単位であることが分かっているので、その型を持つことは素晴らしいことです。あなたがグラフィックスの世界(コアグラフィックスが暮らす場所)に移動すると、突然浮かんであなたの周りが空中に浮かんでいきます(笑)。したがって、CGFloat
を導入することは意味があります。この段落はすべて「教育された推測」です。また
、ちょうどなぜあなたは代わりに、プリミティブ型のNSInteger
などを使用する場合がありますについて明確にするために:この方法は、それはマシンアーキテクチャを最大限に活用し、移植可能なコードを書くことが容易だからです。たとえば、CGFloat
は、一部のマシンでは32ビット、他のマシンでは64ビットを使用します。これらのマシンでは、効率ギャップの大きさに大きく依存します。場合によっては、32ビットと64ビットを使用するための実際の高速化がないため、64ビットを使用することもできます。 CGFloat
のものを宣言した場合、再コンパイルすると、その余分な精度が「無料」で突然取得されます。 iKenndacが指摘したよう
はまた、NSNumber
は、これらのすべてののラッパークラスですあなたのNSArray
sおよびNSDictionary
秒でそれを含めることができます(とBOOL
のような他のプリミティブまたは準プリミティブ型)、それらをより簡単にアーカイブし、NSObject
が行うことができる他のことを行います。
NSNumber
は、プリミティブではなくクラスであり、生の数字を辞書や配列などに入れてカプセル化する必要がある場合に使用されます。 NSInteger
、NSUInteger
、CGFloat
などはシンプルなタイプで、int
,unsigned int
、float
に対応しています(iPhoneのような32-btシステム)。
数字をどこかに保存する必要がある場合は、通常、NSNumber
を使用します。計算やループなどを行う場合は、NSInteger
、NSUInteger
またはCGFloat
を使用してください。
あなたがラップすることができNSInteger
NSNumber
へ:
NSNumber *aNumber = [NSNumber numberWithInteger:21];
...そして、それを取り戻す:http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html
NSIntegerは次のとおりです。
NSInteger anInteger = [aNumber integerValue];
現在地の詳細情報を見つけることができます伝統的なint
のCと同じように、typedefです。 NSUInteger
、CGFloat
などのように、すべてがプリミティブ型の同義語です。
NSNumberは、NSArrayまたはNSDictionaryに番号を付ける必要がある場合に便利です。標準的なプラクティスは、これらのコレクションを使用することと独自のものを使用することです。欠点はObjective-Cオブジェクトのみを含むことができるということです。
NSArray * myArray = [[NSArray alloc] init];
[myArray addObject:3]; // invalid, will not compile.
[myArray [NSNumber numberWithInt:3]]; // ok
:
のNSNumberは、本質的に、アレイに添加することができる(プリミティブ型「ボクシング」のC#/ Javaの概念に類似)は、obj-Cオブジェクトにint
(またはフロートなど)ラップ
パフォーマンス上の理由から、可能であれば、プリミティブ型(int、float、int []など)を使用してください。しかし、.plist
ファイルを読み書きしているときなど、NSArray/NSNumberを回避できないことがあります。
NSInteger、NSUInteger、およびCGFloatは32ビットまたは64ビットで安全なtypedefです。 – Abizern
これまでに他人によって言われたように、NSNumber
はNSObject
サブクラスである。これはCプリミティブではありません(int、unsigned int、float、doubleなど)NSInteger
、CGFloat
、NSUInteger
はCプリミティブ上で単純ですtypedefs
です。
NSNumber
の必要性は、オブジェクトを必要とするAPIのパラメータとして数値を使用する必要があるために発生します。例は、NSArray
、In Core-Data、またはNSDictionary
に数値を格納する場合です。
これらのようなプリミティブがありますか?まあ、NSNumber
はプリミティブ型ではなく、あらゆる種類の数値(浮動小数点、整数型、ブール値など)を囲んでいます。 NSNumber
のベースとなるNSValueについても学習する必要があります。
フロート用に1つありますか?そこフロートには、「NS」のtypedefはありませんが、NSNumber
は任意の浮動小数点数の周りをラップすることができます:
NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];
それとも、CoreGraphicsにプリミティブ型CGFloatを使用することができます。
のNSNumberは、一般的に変数を格納するために使用される、NSUIntegerは、あなたがこれを行うことにより、NSUIntegerへのNSNumberを変更することができます算術
のために使用されます。
それは前にしかし、原則として言われてきた
NSNumber *variable = @1;
NSUInteger variableInt = [variable unsignedIntegerValue];
*で定義する必要がある変数はObjective Cのクラスですが、*を必要としない変数はCのプリミティブです。
- 1. int、NSInteger、NSUIntegerの相違点
- 2. difftimeと ' - 'の違いは何ですか?
- 3. A`と ``の違いは何ですか[:] `
- 4. `&`と `ref`の違いは何ですか?
- 5. バックスティックと$()の違いは何ですか?
- 6. `##`と `hashCode`の違いは何ですか?
- 7. "$^N"と "$ +"の違いは何ですか?
- 8. #{} $ {}と%{}の違いは何ですか?
- 9. typedefとの違いは何ですか?
- 10. %Qと%{}の違いは何ですか?
- 11. `==`と `is`の違いは何ですか?
- 12. $と$$の違いは何ですか?
- 13. NodeJS:「./ ..」と「..」の違いは何ですか?
- 14. $ dirtyと$ invalid:違いは何ですか?
- 15. Backbone.jsとPusherapp - 違いは何ですか?
- 16. libspeとlibspe2?違いは何ですか?
- 17. リストと何か([_])と何か(_)の違い
- 18. は私が達成しようとしている何のNSNumber
- 19. decodeURIComponentとunescapeの違いは何ですか?unescapeの問題は何ですか?
- 20. コロンの配置の違いは何ですか:何かと何か:
- 21. GoogleのDremelとは何ですか? Mapreduceとの違いは?
- 22. 重要な違いは何ですかext2-ext3とext3-ext4の違いは何ですか?
- 23. 「アソシエーション」と「リレーション」という用語の違いは何ですか?
- 24. グロムとは何ですか? mapPartitionsとの違いは?
- 25. NSNumberはint値が間違っています
- 26. AndroidでThread.run()とHandler.post()とServiceの違いは何ですか?
- 27. Androidでは、MotionEventのgetAction()とgetActionMasked()の違いは何ですか?
- 28. 別のNSNumberビヘイビアからNSNumberを作成していますか?
- 29. XSLT属性の違いとは何か
- 30. nHibernateのICriteriaとICriterionの違いと利点は何ですか?
本当に、本当にうなずいている点: NSTimeintervalはdouble型であり、float型ではありません。 doubleは倍精度浮動小数点の略ですが、それでもなおわかります。 また、私はCGFloatのコンパイルが64ビットの倍精度であることを理解していますが、NSIntegerですか?私はそれが役に立つと思う状況を考えることができません。コードでは64ビットが必要な数学をやっていると言ってください... 32ビットでコンパイルするとNSIntegerを使うことはできません。32ビットに収まるなら、64ビットを使うのはなぜですか?奇妙に思える。 – iKenndac
あなたはそうです、NSTimeIntervalはダブルです。私はそれがまだ "浮動小数点型"と考えています。ちょうど倍精度で。 また、多くの場合、NSIntegerを64ビットにすることで多くのコードが改善されないことに同意します。しかし、ここに一つの可能性があります:乱数ジェネレータ。この場合、スピードは本当に気になるので、速ければ32ビットを使いたいかもしれません。しかし、64ビットもうまく動作すれば、(もしあれば)速度コストがあまり無ければ、突然ランダムな幸福(長いサイクル長さなど)で突然大きなブーストが得られます。 – Tyler
なぜ我々は一度投票できますか?ブリリアント! –