OC中常见的结构体,以及NSNumber、NSValue、NSDate的使用
常见的结构体
1 NSPoint和CGPoint 2 NSSize和CGSize 3 NSRect 和 CGRect
NSPoint和CGPoint的使用
1 NSPoint和CGPoint是同义的 2 typedef CGPoint NSPoint; 3 CGPoint的定义 4 struct CGPoint{ 5 CGFloat x; 6 CGFloat y; 7 } 8 9 typedef struct CGPoint CGPoint; 10 typedef double CGFloat;//64位是double ,32位是float 11 12 CGPoint 代表的是二维平面中的一个点 13 可以使用CGPointMake 和 NSMakePoint 函数创建CGPoint
NSSize和 CGSize
1 CGSize和NSSize是同义的 2 typedef CGSize NSSize; 3 4 CGSize的定义 5 struct CGSize{ 6 CGFloat width; 7 CGFloat height; 8 }; 9 10 typedef struct CGSize CGSize; 11 12 CGSize代表的是二维平面中的某个物体的尺寸(宽度和高度) 13 可以使用CGSizeMake 和 NSMakeSize 函数创建CGSize
NSRect 和CGRect的使用
1 CGRect和NSRect是同义的 2 3 typedef CGRect NSRect; 4 5 CGRect的定义 6 7 struct{ 8 9 CGPoint origin; 10 11 CGSize size; 12 13 } 14 15 typedef struct CGRect CGRect; 16 17 CGRect代表的是二维平面中的某个物体的位置和尺寸 18 可以使用CGRectMake 和NSMakeRect函数创建CGRect
常见的结构体使用注意
1 苹果推荐用CG开头的
NSNumber
NSNumber的概述
1 NSArray\NSDictionary中只能存放OC对象,不能存放int \ float \double 等基本数据类型,如果真想把基本数据(比如 int )放进数组和Dicionary中,需要先将基本数据类型包装成OC对象 2 NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSAray\NSDictionary中
NSNumber的创建
1 +(NSNumber *)numberWithInt :(int ) value; 2 +(NSNumber *)numberWithDouble:(double)value; 3 +(NSNumber *)numberWithBool:(BOOL)value; 4 5 //简写的方式 6 NSNumber *n2 =@10; 7 8 int a=100; 9 NSNumber *n3 =@(a); 10 11 取出包装前的基本数据类型的值 12 //从NSNumber对象中获取基本数据类型的值,通过xxValue 13 int numb = [n1 intValue]; 14 15 //遍历 16 arr enumberateObjectsUsingBlock"^(id obj,NSUInteger idx,BOOL *stop ){ 17 int num = [obj intValue]; 18 } 19 20 //字典中使用 21 NSMutableDictionary *productDict =[NSMutableDictionary dictionary]; 22 for(int i=1;i<=3;i++){ 23 //向字典中设置值 24 [productDict setValue:@1 forKey:@"月饼炒辣椒"]; 25 };
NSValue
NSValue概述
1 NSValue包装对象指针,CGRect结构体等 2 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器,它可以保存任意类型的数据,比如int , float , char ,当然也可以是指pointers,structures, and object ids .NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray 或者NSSet的实例.需要注意的是NSValue对象一直是不可枚举的 3 4 为了方便结构体和NSValue的转换,Foundation提供了以下方法 5 将结构体包装成NSValue对象 6 +(NSValue *)valueWithPoint:(NSPoint ) point; 7 +(NSValue *)valueWithSize:(NSSize)size; 8 +(NSValue *)valueWithRect:(NSRect)rect; 9 10 从NSValue对象取出之前包装的结构体 11 -(NSPotion)pointValue; 12 -(NSSize) sizeValue; 13 -(NSRect) rectValue; 14 15 //如果要使用自己定义的结构体 16 MyDate d1 ={2015,2,1}; 17 //valuewithBytes 对象的地址 18 //objCType 类型的说明,使用@encode(数据类型) 19 NSValue *va = [NSValue valueWithBytes:&d1 objCType: @encode(MyDate)];
NSDate的概述
1 1.NSDate可以用来表示时间,可以进行一些常见的日期、时间处理 2 一个NSDate对象就代表一个时间 3 [NSDate date]返回的就是当前时间 4 获取当前时区的时间 5 2015-02-01 06:28:22 +0000格林威治时间 6 +8 时区 7 2.格式化日期 8 //定义NSDate 9 NSDate *d1 =[NSDate date]; 10 //定义日期时间格式化的类 11 NSDateFormatter *formatter =[[NSDateFormatter alloc]init]; 12 formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss"; 13 14 //把Date转换为dataStr 15 NSString *dateStr = [formatter stringFromDate:d1]; 16 17 //设置格式 18 fmt.dateFormat =@"今天 HH:mm"; 19 20 // HH : 24小时制 21 // hh : 12小时制 22 // yyyy : 年 23 // MM : 月 24 // dd : 号 25 // mm : 分钟 26 // ss : 秒 27 // Z : 时区 28 29 30 把NSString -->NSDate 31 NSString *timeStr =@"2015年02月 01日 14:38:20"; 32 NSDate *dd = [formatter dateFromString :timeStr];
计算日期
1 //1)明天的此刻 2 NSTimeInterval secondsPerDay = 24 * 60 * 60; 3 NSDate *tomorrow =[NSDate dateWithTimeIntervalSinceNow:seconsPerDay]; 4 NSLog(@"myDate =%@",tomorrow); 5 6 //2)昨天的现在 7 NSTimeInterval secondsPerDay1 = 24 *60 *60; 8 NSDate *now =[NSDate date]; 9 NSDate *yesterDay =[now addTimeInterval :-secondsPerDay1]; 10 NSLog(@"yesterDay =%@",yesterDay);
日期时间对象
1 集合NSCalendar 和NSDate能够做更多地日期、日期处理 2 获得NSCalendar对象 3 NSCalendar *calendar =[NSCalendar currentCalendar]; 4 获取年月日 5 -(NSDateComponents *)components:(NSCalendarUnit)unitFlags formDate:(NSDate *)date; 6 比较两个日期的差距 7 -(NSDateComponents *)components:(NSCalendarUnit) unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate*) resultDate options:(NSCalendarOptions)opts;