zoukankan      html  css  js  c++  java
  • OC基础(25)

    NSNumber

    本小节知识点:

    1. 【理解】NSNumber基本概念
    2. 【理解】NSNumber的创建
    3. 【理解】从NSNumber对象中的到基本类型数据

    1.NSNumber基本概念

    • NSArrayNSDictionary中只能存放OC对象,不能存放intfloatdouble等基本数据类

    • 如果真想把基本数据(比如int)放进数组或字典中,需要先将基本数据类型包装成OC对象

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


    2.NSNumber的创建

    • 以前
    + (NSNumber *)numberWithInt:(int)value;
    + (NSNumber *)numberWithDouble:(double)value;
    + (NSNumber *)numberWithBool:(BOOL)value;
    • 现在 objc @10; @10.5; @YES; @(num);

    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基本概念
    2. 【理解】常见结构体的包装
    3. 【理解】任意数据的包装

    1.NSValue基本概念

    • NSNumber是NSValue的子类, 但NSNumber只能包装数字类型

    • NSValue可以包装任意值

      • 因此, 可以用NSValue将结构体包装后,加入NSArrayNSDictionary中

    2. 常见结构体的包装

    • 为了方便 结构体 和NSValue的转换,Foundation提供了以下方法
    • 将结构体包装成NSValue对象
    + (NSValue *)valueWithPoint:(NSPoint)point;
    + (NSValue *)valueWithSize:(NSSize)size;
    + (NSValue *)valueWithRect:(NSRect)rect;
    • 从NSValue对象取出之前包装的结构体
    - (NSPoint)pointValue;
    - (NSSize)sizeValue;
    - (NSRect)rectValue;

    3.任意数据的包装

    • NSValue提供了下列方法来包装任意数据
    + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
    + value参数 : 所包装数据的地址
    + type参数 : 用来描述这个数据类型的字符串, 用@encode指令来生成
    
    - 从NSValue中取出所包装的数据
    - (void)getValue:(void *)value;

    NSDate

    本小节知识点:

    1. 【理解】NSDate基本概念
    2. 【理解】格式化日期
    3. 【理解】日期时间对象

    1.NSDate基本概念

    • NSDate可以用来表示时间, 可以进行一些常见的日期时间处理

    • 一个NSDate对象就代表一个时间

    • [NSDate date]返回的就是当前时间

        NSDate *now = [NSDate date];
        NSLog(@"now = %@", now);
         // 设置转换后的目标日期时区
         NSTimeZone *zone = [NSTimeZone systemTimeZone];
         // 得到源日期与世界标准时间的偏移量
         NSInteger interval = [zone secondsFromGMTForDate: date];
         NSLog(@"interval = %lu", interval);
         // 在当前时间基础上追加时区差值
         now = [now dateByAddingTimeInterval:interval];
         NSLog(@"%@", date);

    2.格式化日期

    • 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
        NSString *str = @"2015-06-28 19:53:24";
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        NSDate *date = [formatter dateFromString:str];
        NSLog(@"%@", date);

    3.日期时间对象

    • 结合NSCalendar和NSDate能做更多的日期时间处理

    • 获得NSCalendar对象

    NSCalendar *calendar = [NSCalendar currentCalendar];
    • 获得年月日
    - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date;
        NSDate *date = [NSDate date];
        // 1.创建日历对象
        NSCalendar *calendar = [NSCalendar currentCalendar];
        // 2.利用日历对象获取年月日时分秒
        NSCalendarUnit type = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
        NSDateComponents *cmps =[calendar components:type fromDate:date];
        NSLog(@"year = %lu", cmps.year);
        NSLog(@"month = %lu", cmps.month);
        NSLog(@"day = %lu", cmps.day);
        NSLog(@"hour = %lu", cmps.hour);
        NSLog(@"minute = %lu", cmps.minute);
        NSLog(@"second = %lu", cmps.second);
        NSLog(@"date = %@", date);
    • 比较两个日期的差距
    - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSCalendarOptions)opts;
    
        // 1.确定时间
        NSString *time1 = @"2015-06-23 12:18:15";
        NSString *time2 = @"2015-06-28 10:10:10";
        // 2.将时间转换为date
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
        NSDate *date1 = [formatter dateFromString:time1];
        NSDate *date2 = [formatter dateFromString:time2];
        // 3.创建日历
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSCalendarUnit type = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
        // 4.利用日历对象比较两个时间的差值
        NSDateComponents *cmps = [calendar components:type fromDate:date1 toDate:date2 options:0];
        // 5.输出结果
        NSLog(@"两个时间相差%ld年%ld月%ld日%ld小时%ld分钟%ld秒", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);

    NSFileManager

    本小节知识点:

    1. 【理解】NSFileManager介绍
    2. 【理解】NSFileManager用法(常见的判断)
    3. 【理解】NSFileManager的文件访问
    4. 【理解】NSFileManager的文件操作

    1.NSFileManager介绍

    • 什么是NSFileManager

      • 顾名思义, NSFileManager是用来管理文件系统的
      • 它可以用来进行常见的文件文件夹操作
    • NSFileManager使用了单例模式

      • 使用defaultManager方法可以获得那个单例对象 objc [NSFileManager defaultManager]

    2.NSFileManager用法

    • - (BOOL)fileExistsAtPath:(NSString *)path;
      • path这个文件文件夹是否存在
        NSFileManager *manager = [NSFileManager defaultManager];
        // 可以判断文件
        BOOL flag = [manager fileExistsAtPath:@"/Users/LNJ/Desktop/lnj.txt"];
        NSLog(@"flag = %i", flag);
        // 可以判断文件夹
        flag = [manager fileExistsAtPath:@"/Users/LNJ/Desktop/未命名文件夹"];
        NSLog(@"flag = %i", flag);
    • - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
      • path这个文件文件夹是否存在, isDirectory代表是否为文件夹
        NSFileManager *manager = [NSFileManager defaultManager];
        BOOL directory = NO;
        BOOL flag = [manager fileExistsAtPath:@"/Users/LNJ/Desktop/未命名文件夹" isDirectory:&directory];
        NSLog(@"flag = %i, directory = %i", flag, directory);
    • - (BOOL)isReadableFileAtPath:(NSString *)path;

      • path这个文件文件夹是否可读
    • - (BOOL)isWritableFileAtPath:(NSString *)path;

      • path这个文件文件夹是否可写
      • 系统目录不允许写入
    • - (BOOL)isDeletableFileAtPath:(NSString *)path;

      • path这个文件文件夹是否可删除
      • 系统目录不允许删除

    3.NSFileManager的文件访问

    • - (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;
      • 获得path这个文件文件夹的属性
        NSFileManager *manager = [NSFileManager defaultManager];
        NSDictionary *dict = [manager attributesOfItemAtPath:@"/Users/LNJ/Desktop/lnj.txt" error:nil];
        NSLog(@"dit = %@", dict);
    • - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;

      • 获得path的当前子路径
    • - (NSData *)contentsAtPath:(NSString *)path;

      • 获得文件内容
        NSFileManager *manager = [NSFileManager defaultManager];
        NSArray *paths = [manager contentsOfDirectoryAtPath:@"/Users/LNJ/Desktop/" error:nil];
        NSLog(@"paths = %@", paths);
    • - (NSArray *)subpathsAtPath:(NSString *)path;
    • - (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
      • 获得path的所有子路径
        NSFileManager *manager = [NSFileManager defaultManager];
        NSArray *paths = [manager subpathsAtPath:@"/Users/LNJ/Desktop/"];
        NSLog(@"paths = %@", paths);

    4.NSFileManager的文件操作

    • - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;

      • 拷贝
    • - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;

      • 移动(剪切)
    • - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;

      • 删除
    • - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error;

      • 创建文件夹(createIntermediates为YES代表自动创建中间的文件夹)
        NSFileManager *manager = [NSFileManager defaultManager];
        BOOL flag = [manager createDirectoryAtPath:@"/Users/LNJ/Desktop/test" withIntermediateDirectories:YES attributes:nil error:nil];
        NSLog(@"flag = %i", flag);
    • - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
      • 创建文件(NSData是用来存储二进制字节数据的)
        NSString *str = @"lnj";
        NSData  *data = [str dataUsingEncoding:NSUTF8StringEncoding];
        NSFileManager *manager = [NSFileManager defaultManager];
        BOOL flag = [manager createFileAtPath:@"/Users/LNJ/Desktop/abc.txt" contents:data attributes:nil];
        NSLog(@"flag = %i", flag);
  • 相关阅读:
    golang的缓冲channel简单使用
    golang协程同步的几种方法
    红黑树原理详解及golang实现
    go路由httprouter中的压缩字典树算法图解及c++实现
    golang编译源代码和交叉编译方法
    cmake使用笔记
    如何用redis设计数据库初探
    muduo学习笔记(六) 多线程的TcpServer
    利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件
    数据量庞大的分页穿梭框实现
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5017837.html
Copyright © 2011-2022 走看看