NSNumberとNSValueのベースCデータタイプの対象化パッケージ


NSNumberとNSValueのベースCデータタイプの対象化パッケージ
著者:wangzz
原文の住所:http://blog.csdn.net/wzzvictory/article/details/8614433
転載は出典を明記してください.
もし文章があなたに役に立つと思いましたら、メッセージやWeChat公式アカウントwangzstriveを通じて応援してください.ありがとうございます.
Objective-Cでよく使われているデータ容器は、NSAray、NSDictionaryなど、Objective-Cの対象レベルのデータタイプしか処理できないため、Cの多くのデータタイプに対して、int、floatなど直接処理できない.この問題に対して、Objective-Cは、データを格納する対象のNSNumberとNSValueを2つ提供し、Cにおける基本的なデータタイプを、数値型と構造体のデータを含むObjective-Cで処理できる対象に変換することができる.
NSNumberとNSValueは、Cの基本データタイプをObjective-Cのオブジェクトに変換することができます.
1、基本データタイプとNSValue
①基本データタイプをNSValueに変換する
NSValue *value = [NSValue valueWithBytes:&result objCType:@encode(int)];
では、このうち、resultは基本データの値であり、intは私たちが変換する基本データのタイプである.
②NSValueを基本データタイプに変換する
[value getValue:&result]; 
このうち、valueはNSValueタイプのオブジェクトであり、reultは既知のタイプの基本データタイプである.このように変化して、NSValueに保存されている数値はreultに入れられます.
2、基本データタイプとNSNumber
NSNumberはNSValueのサブクラスであり、構造体以外のCにおける基本的なデータタイプとObjective-Cのオブジェクトの相互変換がより便利になり、NSNumber自身が多くの種類の方法と実例的な方法を提供し、これらの操作を行うことができることを理解しています.
①基本データタイプをNSNumberに変換する
NSNumber    *number = [NSNumber numberWithInt:3];
このようにint型のデータをNSNumberに変換しました.
②NSNumberを基本データタイプに変換する
NSInteger   result = [number integerValue];
同じように便利で、NSNumberに保存されている数値を取り出しました.
3、NSInteger
ちなみにここでNSIntegerというのは記号型intであり、NSIntegerが自動的にマシンを32桁か64桁認識できるという違いです.公式文書はこのように書かれています.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
また、NSIntegerの符号なしバージョンはNSUIDであり、公式文書ではこう定義されています.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif
                                                                                                                                                                                                                      ----by wangzz