你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> NSNumber,NSValue和NSData

NSNumber,NSValue和NSData

編輯:關於IOS

我們在編碼中,很多時候需要將C裡面原生的數據封裝成對象,這樣可以用NSDictionary或者NSArray來存取訪問。尤其是一些做適配的情況下,這種封裝是不可避免的。Objective-C提供了不少類可以幫助我們,比較常見的是NSNumber,NSValue和NSData。

    NSNumber主要是用來封裝ANSI C內置的數據,比如char,float,int等等。 這個類提供了一批封裝/解封的方法 + (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithUnsignedChar:(unsigned char)value; + (NSNumber *)numberWithShort:(short)value; + (NSNumber *)numberWithUnsignedShort:(unsigned short)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithUnsignedInt:(unsigned int)value; + (NSNumber *)numberWithLong:(long)value; + (NSNumber *)numberWithUnsignedLong:(unsigned long)value;     - (char)charValue; - (unsigned char)unsignedCharValue; - (short)shortValue; - (unsigned short)unsignedShortValue; - (int)intValue; - (unsigned int)unsignedIntValue; - (long)longValue; - (unsigned long)unsignedLongValue;     寫起來一般就是: NSNumber *number = [NSNumber numberWithInt: 1234]; int i = [number intValue];     NSValue主要用來封裝自定義的數據結構,可以是系統框架提供的CGRect/CGPoint/CGSize等數據結構,也可以是自己定義的struct。 這個類提供的封裝/解封方法 + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; - (void)getValue:(void *)value;     例如: typedef struct testTag {     int  a;     char *b; }TEST_DATA_ST; --  定義數據結構     TEST_DATA_ST stValue = {0}; stValue.a = 58; --  生成數據結構,並賦初值     NSValue *value = [NSValue valueWithBytes:&stValue objCType:@encode(TEST_DATA_ST)]; --  封裝,注意type類型使用@encode來包裝     TEST_DATA_ST testValue = {0}; [value getValue:&testValue]; --  解封,獲得數據     同時,針對很常見CGRect/CGPoint/CGSize等數據結構,提供了封裝好的接口 + (NSValue *)valueWithCGPoint:(CGPoint)point; + (NSValue *)valueWithCGSize:(CGSize)size; + (NSValue *)valueWithCGRect:(CGRect)rect; - (CGPoint)CGPointValue; - (CGSize)CGSizeValue; - (CGRect)CGRectValue;     需要指出一下,NSNumber實際上是NSValue的一個特殊情況,所以在類關系中,NSNumber是NSValue的子類。     NSData主要是提供一塊原始數據的封裝,方便數據的封裝與流動,比較常見的是NSString/NSImage數據的封裝與傳遞。在應用中,最常用於訪問存儲在文件中或者網絡資源中的數據。 這個類提供的封裝/解封方法 + (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length; - (NSUInteger)length; - (const void *)bytes NS_RETURNS_INNER_POINTER; 從這幾個方法可以看出,NSData根本不管傳遞的內容到底是什麼,僅僅是傳遞一塊內存 —— 僅需內存的起始地址和長度     例如:  char *str = "Hello, World!";  NSData *strData = [NSData dataWithBytes:str length:strlen(str)+1];  -- 封裝      NSString *str = [NSString stringWithUTF8String:[strData bytes]];  [strData bytes]就可以獲得傳遞的內容
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved