pragma mark NSValue
pragma mark 概念
/**
NSValue 其實是 NSNumber的子類
- NSNumber 只能包裝 數(shù)字類型
* NSValue 可以包裝 任意值
1.為什么要使用 NSValue
比如存儲的是一個結(jié)構(gòu)體 是放不進去到 NSNumber 里面的
2.使用 NSValue 包裝系統(tǒng)的結(jié)構(gòu)體 (valueWithPoint:)
....
3.使用 NSValue 包裝 自定義的 結(jié)構(gòu)體 (valueWithBytes : objCType)
參數(shù)說明
valueWithBytes : 接受一個指針,需要傳遞需要 包裝的 結(jié)構(gòu)體的變量 的地址 (&p)
objCType : 需要傳遞 需要包裝的數(shù)據(jù)類型 @encode(Person)
格式
NSValue *valueP = [NSValue valueWithBytes:結(jié)構(gòu)體的指針地址 objCType:@encode(結(jié)構(gòu)體的名字)];
NSArray *arr1 = @[valueP];
4.從 NSValue 取出 自定義的 結(jié)構(gòu)體變量 (getValue:) 需要傳遞指針的地址
參數(shù)說明
getValue:結(jié)構(gòu)體的指針地址
*/
pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
#pragma NSValue
#warning 1.比如存儲的是一個結(jié)構(gòu)體 是放不進去到 NSNumber 里面的
// 定義一個結(jié)構(gòu)體
typedef struct {
int age;
char *name;
double height;
}Person;
// 結(jié)構(gòu)體 不能通過 NSNumber 轉(zhuǎn)換成對象
Person p = {24,"lyh",1.72};
// NSArray *arr = @[p];
#warning 2.使用 NSValue 包裝系統(tǒng)的結(jié)構(gòu)體
CGPoint point = NSMakePoint(10, 20);
NSValue *value = [NSValue valueWithPoint:point];
NSArray *arr = @[value];
NSLog(@"arr = %@",arr);
#warning 3.使用 NSValue 包裝 自定義的 結(jié)構(gòu)體 (valueWithBytes : objCType)
/**
valueWithBytes : 接受一個指針,需要傳遞需要 包裝的 結(jié)構(gòu)體的變量 的地址 (&p)
objCType : 需要傳遞 需要包裝的數(shù)據(jù)類型 @encode(Person)
*/
NSValue *valueP = [NSValue valueWithBytes:&p objCType:@encode(Person)];
NSArray *arr1 = @[valueP];
NSLog(@"arr1 = %@",arr1); // "<18000000 00000000 4a0f0000 01000000 85eb51b8 1e85fb3f>"
#warning 4.從 NSValue 取出 自定義的 結(jié)構(gòu)體變量 (getValue:) 需要傳遞指針的地址
/**
*/
Person p1;
[valueP getValue:&p1];
NSLog(@"age = %i, name = %s ,height = %f",p1.age,p1.name,p1.height);
return 0;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。