NSNumber
【注】繼承自C語言的基礎(chǔ)變量類型(int, char, float等)不能被添加到數(shù)組和字典等OC專有的數(shù)據(jù)結(jié)構(gòu)中扣泊。使用不方便,也不能通過添加類別等OC專有語法稿湿,進行管理。
【注】可以先將基礎(chǔ)類型數(shù)據(jù)押赊,存入NSNumber對象饺藤,再將NSNumber對象存入數(shù)組或字典中。
【另】可以認(rèn)為流礁,NSNumber是基礎(chǔ)變量類型數(shù)據(jù)涕俗,轉(zhuǎn)成對象數(shù)據(jù)的類。
NSNumber * num = @6;
- (char)charValue;
- (id)initWithChar:(char)value;
+ (NSNumber *)numberWithChar:(char)value;
- (NSComparisonResult)compare:(NSNumber *)otherNumber;
- (BOOL)isEqualToNumber:(NSNumber *)number;
NSValue
【注】NSValue是NSNumber的父類神帅,可以存儲任何類型的數(shù)據(jù)再姑,包括復(fù)合數(shù)據(jù)類型(數(shù)組,指針找御,結(jié)構(gòu)體等)元镀,甚至是對象。
【見NSValueDemo1】
//原生方法
- (void)getValue:(void *)value;
- (const char *)objCType
//初始化或類方法
- (id)initWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)value:(const void *)value withObjCType:(const char *)type;
//存取對象的方法(了解)
+ (NSValue *)valueWithNonretainedObject:(id)anObject;
- (id)nonretainedObjectValue;
//比較兩個Value對象是否相等(了解)
- (BOOL)isEqualToValue:(NSValue *)value;
【注】NSValue和NSNumber也是工廠類霎桅,不能被繼承
//NSString是工廠類栖疑,是一堆類,共享一個名字滔驶。根據(jù)不同的創(chuàng)建方式遇革,會得到不同類的對象。
//例如:有一個動物類,可以創(chuàng)建貓萝快,和狗锻霎,和其他動物。
我們可以使用NSValue來輔助我們實現(xiàn)一些簡單數(shù)據(jù)結(jié)構(gòu)的封裝揪漩。比如我們定義了一個簡單的結(jié)構(gòu)體類型
typedef struct {
int id,
float height,
unsigned char flag
}
MyTestStruct; 此時旋恼,我們就可以使用MyTestStruct這個結(jié)構(gòu)體來很容易地封裝數(shù)據(jù)。如
MyTestStruct myTestStruct;
myTestStruct.id=1;
myTestStruct.height=23.0;
myTestStruct.flag='A';
NSValue *value = [NSValue valueWithBytes:&myTestStruct objCType:@encode(MyTestStruct)];
在我們想取出*value 中的數(shù)據(jù)時氢拥,可以使用如下方式:
MyTestStruct theTestStruct;
[valeu getValue:&theTestStruct];
之后就可以對theTestStruct的操作來取得其中的數(shù)據(jù)。