- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
NSValue的基本使用
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
适合所有人,不需要懂的什么
注:(小白直接上手)
一、本章笔记
一、NSValue可以包装任意类型
1.利用 NSValue 包装常用的结构体
+ (NSValue *)valueWithPoint:(NSPoint)point;
NSValue *value = [NSValue valueWithPoint:point];
2.利用 NSValue 包装自定义的结构体
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
NSValue *value2 = [NSValue valueWithBytes:&p objCType:@encode(Person)];
3.从 NSValue 中取出自定义的结构体变量
- (void)getValue:(void *)value;
[value2 getValue:&res];
二、code
main.m
#pragma mark 12-NSValue
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#pragma mark - main函数
int main(int argc, const char * argv[])
{
#pragma 1.利用 NSValue 包装常用的结构体
CGPoint point = NSMakePoint(10, 10);
NSValue *value = [NSValue valueWithPoint:point];
NSArray *arr = @[value];
NSLog(@"%@",arr);
#pragma 2.利用 NSValue 包装自定义的结构体
typedef struct {
int age;
char *name;
double height;
}Person;
Person p = {22,"lyh",1.77};
// valueWithBytes : 接收一个指针, 需要传递需要包装的结构体的变量的地址
// objCType 需要传递需要包装的数据类型 需要用encode
NSValue *value2 = [NSValue valueWithBytes:&p objCType:@encode(Person)];
NSArray *arr2 = @[value2];
NSLog(@"%@",arr2);
#pragma 3.从 NSValue 中取出自定义的结构体变量
Person res;
[value2 getValue:&res];
NSLog(@"age = %i,name = %s,height = %f",res.age,res.name,res.height);
return 0;
}