• 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     NSArrayNSDictionary中只能存放OC对象,不能存放int  float double 等基本数据类型,如果真想把基本数据(比如 int )放进数组和Dicionary中,需要先将基本数据类型包装成OC对象
    2     NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArayNSDictionary中

    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;
  • 相关阅读:
    金融期货期权
    悲剧论——情感净化
    麻将
    后现代postmodern
    AlphaGo
    上帝已死——尼采
    牛顿迭代法
    浏览器访问homestead,由http自动转换为https
    Laravel框架原理(一)--Laravel中常用的PHP语法
    Android面试宝典(1)----android的基础知识
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4511824.html
Copyright © 2020-2023  润新知