OC结构体、NSNumber、NSValue、NSDate
2015-11-10 12:18
483 查看
一、常见结构体
1、NSPoint和CGPoint的使用
2、NSSize和CGSize的使用
3、NSRect和CGRect的使用
二、NSNumber的使用
1、NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray \NSDictionary中
2、NSNumber的创建
3、从NSNumber转化基本类型数据
三、NSValue的介绍和使用
1、NSValue的介绍
2、结构体和NSValue的转换
不能直接放NSPoint类型的数据在数组中
3、常用方法
4、NSDate的介绍和使用
4、1基本使用
4.2、格式化日期
4.3、计算日期
4.4、日期时间对象
1、NSPoint和CGPoint的使用
CGPoint和NSPoint是同义的 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
2、NSSize和CGSize的使用
CGSize和NSSize是同义的 typedef CGSize NSSize; CGSize的定义 struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize; CGSize代表的是二维平面中的某个物体的尺寸(宽度和高度) 可以使用CGSizeMake和NSMakeSize函数创建CGSize
3、NSRect和CGRect的使用
CGRect和NSRect是同义的 typedef CGRect NSRect; CGRect的定义 struct { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect; CGRect代表的是二维平面中的某个物体的位置和尺寸 可以使用CGRectMake和NSMakeRect函数创建CGRect
二、NSNumber的使用
1、NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray \NSDictionary中
2、NSNumber的创建
+ (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithDouble:(double)value; + (NSNumber *)numberWithBool:(BOOL)value;
3、从NSNumber转化基本类型数据
- (char)charValue; - (int)intValue; - (long)longValue; - (double)doubleValue; - (BOOL)boolValue; - (NSString *)stringValue; - (NSComparisonResult)compare:(NSNumber *)otherNumber; - (BOOL)isEqualToNumber:(NSNumber *)number;
三、NSValue的介绍和使用
1、NSValue的介绍
1、NSValue包装对象指针,CGRect结构体等 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数 据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue 类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的 数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
2、结构体和NSValue的转换
将结构体包装成NSValue对象 + (NSValue *)valueWithPoint:(NSPoint)point; + (NSValue *)valueWithSize:(NSSize)size; + (NSValue *)valueWithRect:(NSRect)rect; 从NSValue对象取出之前包装的结构体 - (NSPoint)pointValue; - (NSSize)sizeValue; - (NSRect)rectValue;
不能直接放NSPoint类型的数据在数组中
3、常用方法
1、+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; 创建一个NSValue value:对象地址 objCType:通常是一个用来描述对象类型和大小的字符串,@encode可以接受一个数据类型 的名称自动生成一个合适的描述字符串 2、- (void)getValue:(void *)value(出参); 从接受value的对象中取数值取的数值,存放在这个指针所指向的内存块里。 typedef struct { int year; int month; int day; } Date; Date d = {2015, 2, 1}; // 将结构体d包装成NSValue对象 NSValue *dValue = [NSValue valueWithBytes:&d objCType:@encode(Date)]; NSArray *array = @[dValue]; // 取出value之前包装的结构体数据 Date newD; [dValue getValue:&newD];
4、NSDate的介绍和使用
4、1基本使用
NSDate可以用来表示时间, 可以进行一些常见的日期\时间处理 一个NSDate对象就代表一个时间 [NSDate date]返回的就是当前时间 ,获取当前时区的时间 NSDate *d = [NSDate date]; NSLog(@"d = %@",d); //设置时区 NSTimeZone *zone = [NSTimeZone systemTimeZone]; //设置时间间隔 NSInteger interval = [zone secondsFromGMTForDate: d]; //重新生成时间 NSDate *localeDate = [d dateByAddingTimeInterval: interval]; NSLog(@"%@", localeDate);
4.2、格式化日期
//定义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 : 时区 fmt.dateFormat = @"yyyy年MM月dd号 hh:mm:ss Z"; dataString ----->Date //定义日期时间格式化的类 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //把dataStr转换为Date NSDate *date = [formatter dateFromString:@"2015-02-01 02:30:19"]; NSLog(@"%@",date);
4.3、计算日期
//1)明天的此刻 NSTimeInterval secondsPerDay = 24*60*60; NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay]; NSLog(@"myDate = %@",tomorrow); //2)昨天的现在 NSTimeInterval secondsPerDay1 = 24*60*60; NSDate *now = [NSDate date]; NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1]; NSLog(@"yesterDay = %@",yesterDay);
4.4、日期时间对象
获得NSCalendar对象 NSCalendar *calendar = [NSCalendar currentCalendar]; 获得年月日 - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date; //创建日期 NSDate *d = [NSDate date]; //创建日期对象 NSCalendar *ca = [NSCalendar currentCalendar]; //获得时间组件 NSDateComponents *cms= [ca components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:d]; NSLog(@"%ld-%ld-%ld",cms.year,cms.month,cms.day); 比较两个日期的差距 - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *) startingDate toDate:(NSDate *)resultDate options:(NSCalendarOptions)opts; NSString *time1 = @"2014-04-08 20:50:40"; NSString *time2 = @"2014-04-04 18:45:30"; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSDate *date1 = [fmt dateFromString:time1]; NSDate *date2 = [fmt dateFromString:time2]; // 1.创建一个日历对象 NSCalendar *calendar = [NSCalendar currentCalendar]; // 2.比较时间的差距 int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; NSDateComponents *cmps = [calendar components:unit fromDate:date2 toDate:date1 options:0]; NSLog(@"相差%ld年%ld月%ld天%ld小时%ld分钟%ld秒", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);
相关文章推荐
- [LeetCode] Range Sum Query - Immutable 区域和检索 - 不可变
- iOS-----UIScrollView
- quick-3.6源码修改纪录
- Builder模式在Android自定义底部对话框的实现
- 使用非 GUI 模式运行 JMeter 压力测试
- 关于elementary OS 64bit UEFI启动修复
- UITabBarController用法
- String,StringBuilder的区别
- easyui validatebox 验证类型
- IOS中UITableViewCell使用详解
- UISwipeGestureRecognizer 侧滑手势
- ios中UIButton选中状态切换
- 3.UiObejct API 详细介绍
- The current branch is not configured for pull No value for key branch.master.merge found in config
- debug模式下多次自动build
- Null value was assigned to a property of primitive type setter of 的原因与解决方案
- shuipf 经典记录
- require.js简要概述及require.js的使用方法
- IOS开发—segue几种模式的介绍以及几种创建方式
- Android快速SDK(1)基础工具库QuickBase