OC中常见的结构体,以及NSNumber、NSValue、NSDate的使用

时间:2023-03-09 00:04:33
OC中常见的结构体,以及NSNumber、NSValue、NSDate的使用

常见的结构体

 NSPoint和CGPoint
NSSize和CGSize
NSRect 和 CGRect

NSPoint和CGPoint的使用

 NSPoint和CGPoint是同义的
typedef CGPoint NSPoint;
CGPoint的定义
struct CGPoint{
CGFloat x;
CGFloat y;
} typedef struct CGPoint CGPoint;
typedef double CGFloat;//64位是double ,32位是float CGPoint 代表的是二维平面中的一个点
可以使用CGPointMake 和 NSMakePoint 函数创建CGPoint

NSSize和 CGSize

 CGSize和NSSize是同义的
typedef CGSize NSSize; CGSize的定义
struct CGSize{
CGFloat width;
CGFloat height;
}; typedef struct CGSize CGSize; CGSize代表的是二维平面中的某个物体的尺寸(宽度和高度)
可以使用CGSizeMake 和 NSMakeSize 函数创建CGSize

NSRect 和CGRect的使用

 CGRect和NSRect是同义的

 typedef CGRect NSRect;

 CGRect的定义

 struct{

    CGPoint origin;

  CGSize size;

 }

 typedef struct CGRect CGRect;

 CGRect代表的是二维平面中的某个物体的位置和尺寸
可以使用CGRectMake 和NSMakeRect函数创建CGRect

常见的结构体使用注意

 苹果推荐用CG开头的

NSNumber

NSNumber的概述

     NSArray\NSDictionary中只能存放OC对象,不能存放int \ float \double 等基本数据类型,如果真想把基本数据(比如 int )放进数组和Dicionary中,需要先将基本数据类型包装成OC对象
NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSAray\NSDictionary中

NSNumber的创建

 +(NSNumber *)numberWithInt :(int ) value;
+(NSNumber *)numberWithDouble:(double)value;
+(NSNumber *)numberWithBool:(BOOL)value; //简写的方式
NSNumber *n2 =@; int a=;
NSNumber *n3 =@(a); 取出包装前的基本数据类型的值
//从NSNumber对象中获取基本数据类型的值,通过xxValue
int numb = [n1 intValue]; //遍历
arr enumberateObjectsUsingBlock"^(id obj,NSUInteger idx,BOOL *stop ){
int num = [obj intValue];
} //字典中使用
NSMutableDictionary *productDict =[NSMutableDictionary dictionary];
for(int i=;i<=;i++){
//向字典中设置值
[productDict setValue:@ forKey:@"月饼炒辣椒"];
};

NSValue

NSValue概述

 NSValue包装对象指针,CGRect结构体等
一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器,它可以保存任意类型的数据,比如int , float , char ,当然也可以是指pointers,structures, and object ids .NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray 或者NSSet的实例.需要注意的是NSValue对象一直是不可枚举的 为了方便结构体和NSValue的转换,Foundation提供了以下方法
将结构体包装成NSValue对象
+(NSValue *)valueWithPoint:(NSPoint ) point;
+(NSValue *)valueWithSize:(NSSize)size;
+(NSValue *)valueWithRect:(NSRect)rect; 从NSValue对象取出之前包装的结构体
-(NSPotion)pointValue;
-(NSSize) sizeValue;
-(NSRect) rectValue; //如果要使用自己定义的结构体
MyDate d1 ={,,};
//valuewithBytes 对象的地址
//objCType 类型的说明,使用@encode(数据类型)
NSValue *va = [NSValue valueWithBytes:&d1 objCType: @encode(MyDate)];

NSDate的概述

 .NSDate可以用来表示时间,可以进行一些常见的日期、时间处理
一个NSDate对象就代表一个时间
[NSDate date]返回的就是当前时间
获取当前时区的时间
-- :: +0000格林威治时间
+ 时区
.格式化日期
//定义NSDate
NSDate *d1 =[NSDate date];
//定义日期时间格式化的类
NSDateFormatter *formatter =[[NSDateFormatter alloc]init];
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss"; //把Date转换为dataStr
NSString *dateStr = [formatter stringFromDate:d1]; //设置格式
fmt.dateFormat =@"今天 HH:mm"; // HH : 24小时制
// hh : 12小时制
// yyyy : 年
// MM : 月
// dd : 号
// mm : 分钟
// ss : 秒
// Z : 时区 把NSString -->NSDate
NSString *timeStr =@"2015年02月 01日 14:38:20";
NSDate *dd = [formatter dateFromString :timeStr];

计算日期

 //1)明天的此刻
NSTimeInterval secondsPerDay = * * ;
NSDate *tomorrow =[NSDate dateWithTimeIntervalSinceNow:seconsPerDay];
NSLog(@"myDate =%@",tomorrow); //2)昨天的现在
NSTimeInterval secondsPerDay1 = * *;
NSDate *now =[NSDate date];
NSDate *yesterDay =[now addTimeInterval :-secondsPerDay1];
NSLog(@"yesterDay =%@",yesterDay);

日期时间对象

 集合NSCalendar 和NSDate能够做更多地日期、日期处理
获得NSCalendar对象
NSCalendar *calendar =[NSCalendar currentCalendar];
获取年月日
-(NSDateComponents *)components:(NSCalendarUnit)unitFlags formDate:(NSDate *)date;
比较两个日期的差距
-(NSDateComponents *)components:(NSCalendarUnit) unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate*) resultDate options:(NSCalendarOptions)opts;