zoukankan      html  css  js  c++  java
  • NS其它

    NSArray和NSDictionary的区别?

    • NSArray是有序的,NSDictionary是无序的
    • NSArray是通过下标访问元素,NSDictionary是通过key访问元素

    常用结构体

    在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用

    1:OC中定义一个点,用什么结构体?

    NSPoint;
    CGPoint point = NSMakePoint(10, 20);

    2:OC中保存物体尺寸的,用什么结构体?

    NSSize;
    CGSize size = NSMakeSize(100, 50);

    3:OC中保存某个物体的位置和尺寸,用什么结构体?

    NSRect;
    CGRect rect = NSMakeRect(10, 20, 100, 50);

    NSNumber

    1:NSNumber的应用场景?

    NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArrayNSDictionary中

    2:如何将基本数据类型转换为对象类型?

    int age = 10;
    double number= 5.1;
    int value =  6;
    
    NSNumber *ageN = [NSNumber numberWithInt:age];
    NSNumber *numberN = [NSNumber numberWithDouble:number];
    NSNumber *valueN = [NSNumber numberWithInt:value];
    
    NSArray *arr = @[ageN, numberN, valueN];
    NSLog(@"arr = %@", arr);

    3:如何将对象类型转换为基本数据类型?

    int temp = [ageN intValue];
    double temp = [numberN doubleValue];

     

    4:如何将基本数据类型转换对象类型简写?有什么注意点?

    • 注意: 如果传入的是变量那么必须在@后面写上(), 如果传入的常量, 那么@后面的()可以省略 +
      NSNumber *temp = @(number);
      NSNumber *temp  =@10.10;
      NSLog(@"%@", temp);

    NSValue

    1:NSValue的应用场景?

    1. NSNumber是NSValue的子类, 但NSNumber只能包装数字类型
    2. NSValue可以包装任意值
    3. 因此, 可以用NSValue将结构体包装后,加入NSArrayNSDictionary中

    2:如何利用NSValue包装常用的结构体?

    CGPoint point = NSMakePoint(10, 20);
    NSValue *value = [NSValue valueWithPoint:point];
    NSArray *arr = @[value];
    NSLog(@"%@", arr);

     

    3:如何利用NSValue包装自定义的结构体?

    NSDate

    1:NSDate的应用场景?

    • NSDate可以用来表示时间, 可以进行一些常见的日期时间处理
    • [NSDate date]返回的就是当前0时区的时间
    typedef struct{
        int age;
        char *name;
        double height;
    }Person;
    Person p = {30, "lnj", 1.75};
    
    // valueWithBytes: 接收一个指针, 需要传递需要包装的结构体的变量的地址
    // objCType: 需要传递需要包装的数据类型
    NSValue *pValue = [NSValue valueWithBytes:&p objCType:@encode(Person)];
    NSArray *arr = @[pValue];
    NSLog(@"%@", arr);
    
    // 从NSValue中取出自定义的结构体变量
    Person res;
    [pValue getValue:&res];
    NSLog(@"age = %i, name = %s, height = %f", res.age, res.name, res.height);

    2:如何获取当前时区的时间?

    1. date方法创建的时间对象, 对象中就保存了当前的时间
      NSDate *now = [NSDate date];
    2. 获取当前所处的时区
      NSTimeZone *zone = [NSTimeZone systemTimeZone];
    3. 获取当前时区和指定时区时间的时间差
      NSInteger seconds = [zone secondsFromGMTForDate:now];
      //    NSLog(@"seconds = %lu", seconds);
    4. 计算出当前时区的时间
      NSDate *newDate = [now dateByAddingTimeInterval:seconds];
      NSLog(@"newDate = %@", newDate);

    3:如何格式化时间?

    • NSDate 转 NSString

    1.创建时间

    NSDate *now = [NSDate date];


    2.创建时间格式化

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];


    3.指定格式

    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";


    4.格式化时间

    NSString *str = [formatter stringFromDate:now];
    NSLog(@"%@", str);
    • NSString 转 NSDate
    1.获取时间
    NSString *str = @"2015-06-29 07:05:26 +0000";
    2.创建时间格式化
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 注意: 如果是从NSString格式化为NSDate, 那么dateFormat的格式, 必须和字符串中的时间格式一致, 否则可能转换失败
    3.指定格式
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";
    4.格式化日期
    NSDate *date = [formatter dateFromString:str];
    NSLog(@"%@", date);

     

    NSCalendar

    1:如何获取当前时间的年月日时分秒?

     1. 获取当前时间

    NSDate *now = [NSDate date];
    NSLog(@"now = %@", now);

     

    1.获得NSCalendar 日历对象

    NSCalendar *calendar1 = [NSCalendar currentCalendar];
    // 利用日历类从当前时间对象中获取 年月日时分秒(单独获取出来)
    // components: 参数的含义是, 问你需要获取什么?
    // 一般情况下如果一个方法接收一个参数, 这个参数是是一个枚举 , 那么可以通过|符号, 连接多个枚举值
    NSCalendarUnit type = NSCalendarUnitYear |
    NSCalendarUnitMonth |
    NSCalendarUnitDay |
    NSCalendarUnitHour |
    NSCalendarUnitMinute |
    NSCalendarUnitSecond;
    NSDateComponents *cmps = [calendar1 components:type fromDate:now];
    NSLog(@"year = %ld", cmps.year);
    NSLog(@"month = %ld", cmps.month);
    NSLog(@"day = %ld", cmps.day);
    NSLog(@"hour = %ld", cmps.hour);
    NSLog(@"minute = %ld", cmps.minute);
    NSLog(@"second = %ld", cmps.second);

    2:如何获取当前时间和指定时间的时间差?

    1.过去的一个时间

    NSString *str = @"2015-06-29 07:05:26 +0000";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";
    NSDate *date = [formatter dateFromString:str];

     

    2.当前的时间

    NSDate *now = [NSDate date];
    
    NSLog(@"date = %@", date);
    NSLog(@"now = %@", now);

    3.比较两个时间

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit type = NSCalendarUnitYear |
    NSCalendarUnitMonth |
    NSCalendarUnitDay |
    NSCalendarUnitHour |
    NSCalendarUnitMinute |
    NSCalendarUnitSecond;
    NSDateComponents *cmps = [calendar components:type fromDate:date toDate:now options:0];
    NSLog(@"%ld年%ld月%ld日%ld小时%ld分钟%ld秒钟", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);

     

    NSFileManager

    1:什么是NSFileManager?如何获取NSFileManager 对象?

    NSFileManager是用来管理文件系统的 它可以用来进行常见的文件文件夹操作

    NSFileManager *manager = [NSFileManager defaultManager];

     

    2:如何判断一个文件或者文件夹是否存在?

    BOOL flag = [manager fileExistsAtPath:@"/Users/xiaomage/Desktop/video/01-NSArray基本概念.mp4"];
    NSLog(@"flag = %i", flag);

     

    3:如何判断一个文件是否存在,并且判断它是否是一个文件夹?

    • 注意: 该方法的返回值是说明传入的路径对应的文件或文件夹是否存在
    • 第二个参数是用于保存判断结果的, 如果是一个目录, 那么就会赋值为YES, 如果不是就赋值为NO
      BOOL dir = NO;
      BOOL flag = [manager fileExistsAtPath:@"/Users/xiaomage/Desktop/video/01-NSArray基本概念.mp4" isDirectory:&dir];
      NSLog(@"flag = %i, dir = %i", flag, dir);

    4:如何获取文件或文件夹的属性?

    NSDictionary *info = [manager attributesOfItemAtPath:@"/Users/xiaomage/Desktop/video/01-NSArray基本概念.mp4" error:nil];
    NSLog(@"info = %@", info);

     

    5:如何获取文件夹中所有的文件?

    1.注意:contentsOfDirectoryAtPath方法有一个弊端, 只能获取当前文件夹下所有的文件, 不能获取子文件夹下面的文件

    NSArray *res = [manager contentsOfDirectoryAtPath:@"/Users/xiaomage/Desktop/video" error:nil];
    NSLog(@"res = %@", res);

     

    2.获取当前文件夹下所有的文件, 能获取子文件夹下面的文件

    NSArray *res = [manager subpathsAtPath:@"/Users/xiaomage/Desktop/video"];
    NSArray *res = [manager subpathsOfDirectoryAtPath:@"/Users/xiaomage/Desktop/video" error:nil];
    NSLog(@"res = %@", res);

     

    6:如何创建文件夹?

    /*
     createDirectoryAtPath: 告诉系统文件夹需要创建到什么位置
     withIntermediateDirectories: 如果指定的文件中有一些文件夹不存在, 是否自动创建不存在的文件夹
     attributes: 指定创建出来的文件夹的属性
     error: 是否创建成功, 如果失败会给传入的参数赋值
     注意: 该方法只能用于创建文件夹, 不能用于创建文件
     */
    BOOL flag = [manager createDirectoryAtPath:@"/Users/xiaomage/Desktop/abc/lnj" withIntermediateDirectories:YES attributes:nil error:nil];
    NSLog(@"%i", flag);

     

    7:如何创建文件?

    /*
     createFileAtPath: 指定文件创建出来的位置
     contents : 文件中的内容
     attributes: 创建出来的文件的属性
     NSData : 二进制数据
     注意: 该方法只能用于创建文件, 不能用于创建文件夹
     */
    NSString *str = @"江哥真帅";
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [manager createFileAtPath:@"/Users/xiaomage/Desktop/abc.txt" contents:data attributes:nil];

     

  • 相关阅读:
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
  • 原文地址:https://www.cnblogs.com/dreamWanweidong/p/4998769.html
Copyright © 2011-2022 走看看