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);
  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5017837.html
Copyright © 2011-2022 走看看