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 [email protected]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;
时间: 2024-07-30 05:34:01

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

Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect

1   NSRange NSRange 的原型为 typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; NSMakeRange的函数 NS_INLINEz是内联函数 typedef NSRange *NSRangePointer; NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) { NSRange r; r.locatio

MFC中的NMHDR结构体

建立spin控件,创建UDN_DELTAPOS一个消息函数后: void CSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) { NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR; // TODO: Add your control notification handler code here *pResult = 0; } 问题1:参数NMHDR* pNMHDR, LRESULT* pResul

C中多变的结构体 struct typedef

 这几天看代码,看到几种类型的结构体,结构声明如下: struct    book{ string name; int price; int num; }; 此种结构定义结构变量的格式如下: struct    book      student; struct      book{ string name; int price; int num; }student; 此种形式代表声明结构的过程和定义结构变量的过程被合并成一步 typedef    struct  (book){   //b

ffmpeg中对AVInputFormat结构体中函数的调用

http://blog.csdn.net/junllee/article/details/7722605 opt_input_file()->      avformat_open_input()->             init_input()->                   av_probe_input_format()->                          av_probe_input_format2()->                 

剔除list中相同的结构体数据

剔除list中相同的结构体数据,有三个思路: 1.两层循环,逐个比较 2.使用set容器来剔除 3.使用unique方法去重 // deduplication.cpp : 定义控制台应用程序的入口点. // #include <list> #include <set> #include <iostream> #include <algorithm> #include <vector> #include <tchar.h> using

NSValue (将结构体包装成NSValue)

将结构体包装成 NSValue ,并取出结构体 1 NSRect rect = {0, 0, 200,200}; 2 NSValue *rectValue = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)]; 3 NSRect newRect; 4 [rectValue getValue:&newRect]; 5 NSLog(@"%f,%f,%f,%f",newRect.origin.x,newRect.o

黑马程序员_ Objective-c 之Foundation之NSNumber ,NSValue, NSDate

Objective-c 之Foundation之NSNumber ,NSValue, NSDate 1.NSNumber具体用法如下: 在Objective-c中有int的数据类型,那为什么还要使用数字对象NSNumber.这是因为很多类(如NSArray)都要求使用对象,而int不是对象.NSNumber就是数字对象,我们可以使用NSNumber对象来创建和初始化不同类型的数字对象. 此外,还可以使用实例方法为先前分配的NSNumber对象设定指定的值,这些都是以initWith开头,比如in

Foundation 框架中常用的结构体详解

Foundation 框架包含了很多开发常用的数据类型: Foundation中包含的数据类型: 结构体 枚举 类 要想使用 Foundation 中的数据类型,只要包含主头文件即可. #impot <Foundation/Foundation.h> 结构体: 我们常用的结构体有:NSRange.NSPoint (CGPint ).NSSize(CGSize).NSRect(CGRect) NSRange:是用来表示位置和范围的. 本质是: 1 typedef struct _NSRange

f2fs解析(七)node管理器中的 free_nid 结构体

除了node_info之外, node管理器中还有还有个重要的数据结构: 145 struct free_nid { 146 struct list_head list; /* for free node id list */ 147 nid_t nid; /* node id */ 148 int state; /* in use or not: NID_NEW or NID_ALLOC */ 149 }; 这个结构体体很简单,比刚才的node_info轻量级多了,仅仅是标识了当前可以使用的n