Foundation 常用类

2025/4/21

# NSString

  • 如果属性类型是NSString,那么@property用copy@property (copy) NSString* str
  • 字符串初始化默认是immutable,不可修改,需要使用mutableCopy方法变成mutable
  • 如果字符串大量修改,用NSMutableString

  • 转化为大写:uppercaseString
  • 转化为小写:lowercaseString
  • 去掉头尾指定字符串
  • 去掉字符串前后的空格stringByTrimmingCharactersInSet [NSCharacterSet whitespaceCharacterSet]
  • 去掉字符串前后的小写字母stringByTrimmingCharactersInSet [NSCharacterSet lowercaseCharacterSet]
  • 去掉字符串前后的大写字母stringByTrimmingCharactersInSet [NSCharacterSet uppercaseCharacterSet]
  • 拼接字符串对象:stringWithFormat
  • 计算字符串长度length
  • 计算字符串长度length
  • 拿到指定下标的字符characterAtIndex中文等字符转化回字符串stringWithCharacters
  • 比较两个字符串是否相等isEqualToString
  • 字符串指定下标截取到最后substringFromIndex
  • 字符串从开头截取到指定下标:substringToIndex
  • 字符串截取区间:substringWithRange
  • 字符串替换:stringByReplacingOccurrencesOfString
  • 字符串比较compare
  • 将c的char[]转化为oc的NSString:stringWithUTF8String
  • 将oc的NSString转化为c的char*
  • 将字符串内容写入磁盘writeToFile
  • 从网络/本地读取字符串URLWithString
  • 判断开头是否是某个字符串hasPrefix
  • 判断结尾是否是某个字符串hasSuffix
  • 从前往后搜索另一串字符串rangeOfString
  • 从后往前搜索另一串字符串rangeOfString options NSBackwardsSearch
  • 字符串转其他类型型:intValue/floatValue/doubleValue/boolValue
  • 去头尾空格:stringByTrimmingCharactersInSet
  • 去掉头尾指定字符串stringByTrimmingCharactersInSet options:NSBackwardsSearch
  • 字符串拆解成数组:componentsSeparatedByString
  • 拼接字符串对象:stringWithFormat

    int age = 14;
    NSString* s2 = @"小黄";
    NSString* s3 = [NSString stringWithFormat:@"大家好,我叫%@, 我今年%d岁了",s2, age];
    
    1
    2
    3
  • 计算字符串长度length

    NSString* s1 = @"1哈哈";
    // s1.length
    NSUInteger num = [s1 length];
    NSLog(@"%lu", num); // 3
    
    1
    2
    3
    4
  • 拿到指定下标的字符characterAtIndex中文等字符转化回字符串stringWithCharacters

    NSString* s = @"ha和额呵hahh";
    unichar c = [s characterAtIndex:2];
    NSString *charStr = [NSString stringWithCharacters:&c length:1];
    NSLog(@"%@", charStr); // 和
    
    1
    2
    3
    4
  • 比较两个字符串是否相等isEqualToString

    NSString* s1 = @"123456";
    NSString* s2 = @"123456";
    BOOL isEqual = [s1 isEqualToString:s2];
    NSLog(@"%@", isEqual ? @"相同" : @"不同");
    
    1
    2
    3
    4
  • 字符串指定下标截取到最后substringFromIndex

    NSString* s1 = @"呵呵呵 666 hello 666";
    NSString* s2 = [s1 substringFromIndex:4];
    NSLog(@"%@", s2); // 666 hello 666
    
    1
    2
    3
  • 字符串从开头截取到指定下标:substringToIndex

    NSString* s1 = @"呵呵呵 666 hello 666";
    NSString* s2 = [s1 substringToIndex:3];
    NSLog(@"%@", s2); // 呵呵呵
    
    1
    2
    3
  • 字符串截取区间:substringWithRange

    NSString* s1 = @"呵呵呵 666 hello 666";
    NSString* s2 = [s1 substringWithRange:NSMakeRange(2, 3)];
    NSLog(@"%@", s2); // 呵 6
    
    1
    2
    3
  • 字符串替换:stringByReplacingOccurrencesOfString

    NSString* s1 = @"我爱北京天安门";
    NSString* s2 = [s1 stringByReplacingOccurrencesOfString:@"北京天安门" withString:@"广州小蛮腰"];
    NSLog(@"%@", s2); // 我爱广州小蛮腰
    
    1
    2
    3
  • 字符串比较compare

可以添加第二个参数作比较配置

NSString* s1 = @"China";
NSString* s2 = @"Japan";
NSComparisonResult result = [s1 compare:s2];
if (result == NSOrderedAscending) {
    NSLog(@"%@在前面", s1);
} else if (result == NSOrderedDescending) {
    NSLog(@"%@在前面", s2);
} else {
    NSLog(@"相同");
}
1
2
3
4
5
6
7
8
9
10
  • 将c的char[]转化为oc的NSString:stringWithUTF8String
    char c1[] = "1234567";
    NSString* str1 = [NSString stringWithUTF8String:s0];
    NSLog(@"%@", str1);
    
    1
    2
    3
  • 将oc的NSString转化为c的char*
    NSString* s1 = @"assde";
    const char* c = s1.UTF8String;
    NSLog(@"%s", c);
    
    1
    2
    3
  • 将字符串内容写入磁盘writeToFile
    NSString *path = @"/Users/dreamarts/Documents/file.txt";
    NSString *s = [NSString stringWithContentsOfFile:path
                                            encoding:NSUTF8StringEncoding
                                                error:nil];
    NSLog(@"%@", s);
    
    1
    2
    3
    4
    5
  • 从网络/本地读取字符串URLWithString
    NSURL *url = [NSURL URLWithString:@"file:///Users/dreamarts/Documents/file.txt"];
    NSString *str = [NSString stringWithContentsOfURL:url
                                              encoding:NSUTF8StringEncoding
                                                error:nil];
    NSLog(@"%@", str);
    
    1
    2
    3
    4
    5

  • 从本地读取格式:file:///Users/dreamarts/Documents/file.txt
  • 从网络读取格式:https://www.baidu.com
  • 从ftp读取格式:ftp://www.baidu.com/1.txt
  • 判断开头是否是某个字符串hasPrefix
    NSString* s1 = @"呵呵呵 666 hello";
    BOOL res = [s1 hasPrefix:@"呵呵"];
    
    1
    2
  • 判断结尾是否是某个字符串hasSuffix
    NSString* s1 = @"呵呵呵 666 hello";
    BOOL res = [s1 hasSuffix:@"hello"];
    
    1
    2
  • 从前往后搜索另一串字符串rangeOfString
    NSString* s1 = @"呵呵呵 666 hello 666";
    NSRange res = [s1 rangeOfString:@"666"];
    NSLog(@"%lu", res.length); // 匹配的长度 没找到为0
    NSLog(@"%lu", res.location); // 出现的下标 没找到为 NSNotFound
    
    1
    2
    3
    4
  • 从后往前搜索另一串字符串rangeOfString options NSBackwardsSearch
    NSString* s1 = @"呵呵呵 666 hello 666";
    NSRange res = [s1 rangeOfString:@"666" options:NSBackwardsSearch];
    NSLog(@"%lu", res.length); // 3
    NSLog(@"%lu", res.location); // 14
    
    1
    2
    3
    4
  • 字符串转其他类型型:intValue/floatValue/doubleValue/boolValue
    NSString* s1 = @"12";
    int n1 = s1.intValue;
    NSLog(@"%d", n1); // 12
    
    1
    2
    3
  • 去头尾空格:stringByTrimmingCharactersInSet
    NSString *str1 = @" ss d ";
    str1 = [str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSLog(@"%@", str1); // ss d
    
    1
    2
    3
  • 去掉头尾指定字符串
    NSString *str1 = @"aaa ss d .xxx";
    str1 = [str1 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@".xxx"]];
    NSLog(@"%@", str1); // aaa ss d
    
    1
    2
    3

# NSMutableString

  • 继承自NSString,有所有的NSString的方法, 具备可变性
  • 使用场景:大批量字符串拼接的时候(5次以上)
  • 创建:NSMutableString *str = [s1 mutableCopy];
  • 创建:NSMutableString *str = [NSMutableString string];
  • 添加:[str appendString:@"123"];
  • 删除:[str deleteCharactersInRange:NSMakeRange(0, 3)];
  • 替换:[str replaceCharactersInRange:NSMakeRange(0, 3) withString:@"123"];
  • 截取:[str substringWithRange:NSMakeRange(0, 3)];
  • 插入:[str insertString:@"123" atIndex:0];
  • 截取:[str substringFromIndex:0];
  • 截取:[str substringToIndex:3];
  • 截取:[str substringWithRange:NSMakeRange(0, 3)];
  • 替换:[str replaceCharactersInRange:NSMakeRange(0, 3) withString:@"123"];
    NSMutableString* s1 = [NSMutableString string];
    [s1 appendFormat:@"jack"];
    [s1 replaceCharactersInRange:NSMakeRange(1, 1) withString:@"e"];
    NSLog(@"%@", s1); // jeck
    
    1
    2
    3
    4

# NSRange

  • 语法:NSRange range = {0, 3};
  • 语法:NSRange range = {.location = 3, .length = 7};
  • 属性:locationlength
  • 创建:NSRange range = NSMakeRange(0, 3);
  • 转化为字符串:NSStringFromRange(range)

# NSArray

  • 特点:
    • 只能存储OC对象
    • 长度固定,无法新增/删除
    • 元素紧密相连,每个元素都有自己的下标
    • 元素的类型是id类型
    • 当NSArray存储数据类型不一样的时候,遍历可以用id类型
  • 创建:NSArray *arr = @[@"jack", @"rose", @"tom"];
  • 创建:NSArray *arr = [NSArray arrayWithObjects:@"jack", @"rose", @"tom", nil];

nil表示数组结束

  • 创建:NSArray *arr = @[@"jack", @"rose", @"tom"];
  • 长度:count
  • 是否包含:containsObject
  • 拿到第一个元素:firstObject
  • 拿到最后一个元素:lastObject
  • 找到第一个指定元素的下标:indexOfObject:
  • 遍历1: for (int i = 0; i < arr.count; i++)
  • 遍历2:for (NSString* str in arr)
  • 遍历3:enumerateObjectsUsingBlock
  • 拼接所有项目:componentsJoinedByString
  • 字符串拆解成数组:componentsSeparatedByString
  • 排序:sortedArrayUsingComparator
  • 本地存储:writeToFile
  • 本地读取arrayWithContentsOfFile
  • 创建:NSArray *arr = @[@"jack", @"rose", @"tom"];
    NSArray *arr = @[@"jack", @"rose", @"tom"];
    NSLog(@"arr = %@", arr); // arr = ( jack, rose, tom )
    NSLog(@"%@", arr[0]); // jack
    NSLog(@"%lu", arr.count);
    
    1
    2
    3
    4
  • 是否包含:containsObject
    NSArray *arr = @[@"jack", @"rose", @"tom"];
    BOOL res = [arr containsObject:@"jack"]; // YES
    
    1
    2
  • 拿到第一个元素:firstObject
    NSArray *arr = @[];
    arr.firstObject; // nil
    
    1
    2
  • 找到第一个指定元素的下标:indexOfObject:
    NSArray *arr = @[@"jack", @"rose", @"tom"];
    NSUInteger i = [arr indexOfObject:@"rose"];
    NSLog(@"%lu", i); // 1
    
    NSUInteger i = [arr indexOfObject:@"r"]; // NSNotFound
    
    1
    2
    3
    4
    5
  • 遍历3:[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx,BOOL *_Nonnull stop) {}];
    NSArray *arr = @[ @"jack", @"rose", @"tom" ];
    [arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx,
                                      BOOL *_Nonnull stop) {
      NSLog(@"%@", obj); // jack rose tom
      if (idx == 1) {
          *stop = YES; // 停止遍历
      }
    }];
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 拼接所有项目:componentsJoinedByString
    NSArray *arr = @[ @"jack", @"rose", @"tom" ];
    NSString* s = [arr componentsJoinedByString:@"-"];
    NSLog(@"%@", s); // jack-rose-tom
    
    1
    2
    3
  • 字符串拆解成数组:componentsSeparatedByString
    NSString* s = @"jack-rose-tom";
    NSArray* arr = [s componentsSeparatedByString:@"-"]; // ( jack, rose, tom )
    
    1
    2
  • 排序:sortedArrayUsingComparator
    NSArray *arr = @[@"jack", @"rose", @"tom"];
    NSArray *arr = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
      return [obj1 compare:obj2];
    }]
    
    // 按数字排序
    NSString* s1 = @"19 10 9 32 46 63 66 34 446 77 44";
    NSArray* a1 = [s1 componentsSeparatedByString:@" "];
    NSArray* a2 = [a1 sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        return [obj1 intValue] - [obj2 intValue];
    }];
    NSLog(@"%@", a2); // 从小到大
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

存储文件类型需要是.plist类型

  • 本地存储:writeToFile
    NSArray* arr = @[@"jack", @"rose", @"lili"];
    [arr writeToFile:@"/Users/dreamarts/Desktop/app.plist" atomically:NO];
    
    1
    2
  • 本地读取arrayWithContentsOfFile
    NSArray* arr = [NSArray arrayWithContentsOfFile:@"/Users/dreamarts/Desktop/app.plist"];
    if (arr != nil) {
        NSLog(@"%@", arr);
    }
    
    1
    2
    3
    4

# NSMutableArray

  • 特点:继承自NSArray,有所有的NSArray的方法,具备可变性
  • 创建:NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
  • 添加:addObject:
  • 多个添加:addObjectsFromArray
  • 删除:removeObjectAtIndex:
  • 替换:replaceObjectAtIndex:withObject:
  • 插入:insertObject: atIndex:
  • 删除指定范围:removeObjectsInRange
  • 删除最后一个元素:removeLastObject
  • 删除所有元素:removeAllObjects
  • 添加:addObject:
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr addObject:@"qiqi"];
    NSLog(@"%@", arr); // ( jack, rose, tom, qiqi )
    
    1
    2
    3
  • 多个添加:addObjectsFromArray
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr addObjectsFromArray:@[@"xx", @"hh"]];
    NSLog(@"%@", arr); // ( jack, rose, tom, xx, hh )
    
    1
    2
    3
  • 删除:removeObjectAtIndex:
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr removeObjectAtIndex:1];
    NSLog(@"%@", arr); // ( jack, tom )
    
    1
    2
    3
  • 替换:replaceObjectAtIndex:withObject:
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr replaceObjectAtIndex:1 withObject:@"lili"];
    NSLog(@"%@", arr); // ( jack, lili, tom )
    
    1
    2
    3
  • 插入:insertObject: atIndex:
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr insertObject:@"qiqi" atIndex:2];
    NSLog(@"%@", arr); // ( jack, rose, qiqi, tom )
    
    1
    2
    3
  • 删除指定范围:removeObjectsInRange
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr removeObjectsInRange:NSMakeRange(1, 2)];
    NSLog(@"%@", arr); // ( jack )
    
    1
    2
    3
  • 删除最后一个元素:removeLastObject
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr removeLastObject];
    NSLog(@"%@", arr); // ( jack, rose )
    
    1
    2
    3
  • 删除所有元素:removeAllObjects
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"tom", nil];
    [arr removeAllObjects];
    NSLog(@"%@", arr); // ( jack, rose )
    
    1
    2
    3

# NSNumber

  • 包装基本数据类型,作为一个对象,可以存入数组中
  • 类型初始化:@(num)
  • 类型转化:intValuefloatValuedoubleValueboolValuestringValue
  • 类型初始化:@(num)
    int num = 20;
    NSNumber* n = @(num);
    
    1
    2
  • 创建:NSNumber *num = @(10);
    NSNumber* num = @12.333;
    NSArray *arr = @[num];
    NSLog(@"%@", arr); // ( "12.333" )
    NSLog(@"%.2f", num.floatValue); // 12.33
    
    1
    2
    3
    4

# NSDictionary

  • 创建:dictionaryWithObjectsAndKeys
  • 创建:@{@"name": @"coderHDY", @"age": @18}
  • 取值:objectForKey:
  • 遍历1:enumerateKeysAndObjectsUsingBlock:
  • 遍历2:for in
  • 键值对数量:count
  • 获取所有键:allKeys
  • 本地存储:writeToFile
  • 本地读取:dictionaryWithContentsOfFile
  • 创建:dictionaryWithObjectsAndKeys
    NSDictionary* dir1 = [NSDictionary dictionaryWithObjectsAndKeys:@"coderHDY", @"name", @"18", @"age", nil];
    NSDictionary* dir2 = @{@"name": @"coderHDY", @"age": @18};
    NSLog(@"%@", dir2);
    
    1
    2
    3
  • 取值:objectForKey:
    NSDictionary* dir2 = @{@"name": @"coderHDY", @"age": @18};
    NSString* age = [dir2 objectForKey:@"age"]; // 18
    
    1
    2
  • 遍历1:enumerateKeysAndObjectsUsingBlock:
    [dir2 enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"%@ = %@", key, age);
    }];
    
    1
    2
    3
  • 遍历2:for in
    NSDictionary* dir2 = @{@"name": @"coderHDY", @"age": @18, @"222": @"id"};
    for (NSString* key in dir2) {
      NSLog(@"%@ = %@", key, dir2[key]);
    }
    
    1
    2
    3
    4
  • 键值对数量:count
    NSDictionary* dir2 = @{@"name": @"coderHDY", @"age": @18, @"222": @"id"};
    NSUInteger n = dir2.count; // 3
    
    1
    2

本地存储读取的文件类型需要是.plist

  • 本地存储:writeToFile
    NSString* path = @"/Users/dreamarts/Desktop/app.plist";
    NSDictionary* dir = @{@"name": @"coderHDY", @"age":@18};
    BOOL res = [dir writeToFile:path atomically:NO];
    if (res) {
        NSLog(@"OK");
    }
    
    1
    2
    3
    4
    5
    6
  • 本地读取:dictionaryWithContentsOfFile
    NSString* path = @"/Users/dreamarts/Desktop/app.plist";
    NSDictionary* dir = [NSDictionary dictionaryWithContentsOfFile:path];
    if (dir) {
        NSLog(@"%@", dir);
    }
    
    1
    2
    3
    4
    5

# NSMutableDictionary

  • 特点:继承自NSDictionary,有所有的NSDictionary的方法,具备可变性
  • 创建:dictionaryWithDictionary:
  • 添加:setObject:forKey:
  • 删除:removeObjectForKey:
  • 删除所有:removeAllObjects
  • 创建:dictionaryWithDictionary:
    NSMutableDictionary* dir = [NSMutableDictionary dictionaryWithDictionary:@{@"name": @"coderHDY", @"age":@18}];
    
    1
  • 添加:setObject:forKey:
    NSMutableDictionary* dir = [NSMutableDictionary dictionaryWithDictionary:@{@"name": @"coderHDY", @"age":@18}];
    [dir setObject:@"eat" forKey:@"action"];
    
    1
    2
  • 删除:removeObjectForKey:
    NSMutableDictionary* dir = [NSMutableDictionary dictionaryWithDictionary:@{@"name": @"coderHDY", @"age":@18}];
    [dir removeObjectForKey:@"age"];
    
    1
    2
  • 删除所有:removeAllObjects
    NSMutableDictionary* dir = [NSMutableDictionary dictionaryWithDictionary:@{@"name": @"coderHDY", @"age":@18}];
    [dir removeAllObjects];
    
    1
    2

# NSFileManager

  • 创建:defaultManager
  • 判断文件夹存在:fileExistsAtPath:
  • 判断文件/文件夹是否存在:fileExistsAtPath:isDirectory:
  • 判断文件夹是否可以读取:isReadableFileAtPath:
  • 判断文件夹是否可以写入:isWritableFileAtPath:
  • 判断文件夹是否可以执行:isExecutableFileAtPath:
  • 创建文件:createFileAtPath
  • 创建文件夹:createDirectoryAtPath:withIntermediateDirectories:attributes:error:
  • 删除文件夹:removeItemAtPath:error:
  • 删除文件:removeItemAtPath:error:
  • 移动文件:moveItemAtPath:toPath:error:
  • 拷贝文件:copyItemAtPath:toPath:error:
  • 获取文件大小:attributesOfItemAtPath:error:
  • 获取文件属性:attributesOfItemAtPath:error:
  • 获取文件类型:typeOfItemAtPath:error:
  • 获取文件创建时间:creationDateForItemAtPath:error:
  • 获取文件修改时间:modificationDateForItemAtPath:error:
  • 获取文件访问时间:accessDateForItemAtPath:error:
  • 获取文件权限:posixPermissionsForItemAtPath:error:
  • 获取文件子目录和子文件:contentsOfDirectoryAtPath:error:
  • 获取文件内所有(后代)文件和目录:subpathsAtPath:
  • 创建:defaultManager
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    
    1
  • 判断文件夹存在:fileExistsAtPath:
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    NSString* path = @"/Users/dreamarts/Desktop/app.plist";
    BOOL res = [defaultManage fileExistsAtPath:path];
    
    1
    2
    3
  • 判断文件/文件夹是否存在:fileExistsAtPath:isDirectory:
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    NSString* path = @"/Users/dreamarts/Desktop/app.plist";
    BOOL isDir = NO;
    BOOL res = [defaultManage fileExistsAtPath:path isDirectory:&isDir];
    NSLog(@"exist = %d, isDir = %d", res, isDir); // exist = 1, isDir = 0
    
    1
    2
    3
    4
    5
  • 判断文件夹是否可以读取:isReadableFileAtPath:
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    NSString* path = @"/Users/dreamarts/Desktop/app.plist";
    BOOL res = [defaultManage isReadableFileAtPath:path];
    NSLog(@"res = %d", res); // 1
    
    1
    2
    3
    4
  • 获取文件子目录和子文件:contentsOfDirectoryAtPath:error:
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    NSString* path = @"/Users/dreamarts/Desktop";
    NSArray* arr = [defaultManage contentsOfDirectoryAtPath:path error:nil];
    for (NSString* str in arr) {
        NSLog(@"%@", str);
    }
    
    1
    2
    3
    4
    5
    6
  • 获取文件内所有文件和目录:subpathsAtPath:
    NSFileManager* defaultManage = [NSFileManager defaultManager];
    NSString* path = @"/Users/dreamarts/Desktop";
    NSArray* arr = [defaultManage subpathsAtPath:path];
    for (NSString* str in arr) {
        NSLog(@"%@", str); // 打印中文路径
    }
    
    1
    2
    3
    4
    5
    6
  • 创建文件:createFileAtPath
    NSString* path = @"/Users/dreamarts/Desktop/1.txt";
    NSData* data = [path dataUsingEncoding:NSUTF8StringEncoding];
    NSFileManager* defaultManager = [NSFileManager defaultManager];
    BOOL res = [defaultManager createFileAtPath:path contents:data attributes:nil];
    
    1
    2
    3
    4

withIntermediateDirectories:YES: 深度创建

  • 创建文件夹:createDirectoryAtPath:withIntermediateDirectories:attributes:error:
    NSString *path = @"/Users/dreamarts/Desktop/AA/BB/CC";
    NSFileManager *defaultManager = [NSFileManager defaultManager];
    BOOL res = [defaultManager createDirectoryAtPath:path
                          withIntermediateDirectories:YES
                                          attributes:nil
                                                error:nil];
    
    1
    2
    3
    4
    5
    6

# NSThread

  • NSThread 是一个线程对象,它允许你创建一个线程,并运行代码。
  • 沉睡线程(单位:秒):[NSThread sleepForTimeInterval:10]

# NSPoint

  • CGPoint 是一个结构体,它表示一个二维坐标点。也有同样作用的方法NSPoint,建议使用CGPoint
  • 创建1:NSPoint p2 = {20, 30};
  • 创建2:CGPointMake(x, y)
  • 判断结构体是否相等:CGPointEqualToPoint(point1, point2)
  • 获取结构体中的x和y值:point.xpoint.y
  • 创建1:NSPoint p2 = {20, 30};
    NSPoint p = NSMakePoint(10, 20);
    NSLog(@"x = %f, y = %f", p.x, p.y);
    
    1
    2
  • 创建2:CGPointMake(x, y)
    NSPoint p2 = {20, 30};
    
    1

# NSSize

  • CGSize 是一个结构体,它表示一个二维尺寸。也有同样作用的方法NSSize,建议使用CGSize
  • 创建1:NSSize s2 = {20, 30};
  • 创建2:CGSizeMake(width, height)
  • 判断结构体是否相等:CGSizeEqualToSize(size1, size2)
  • 获取结构体中的width和height值:size.widthsize.height
  • 创建2:CGSizeMake(width, height)
    NSSize s1 = NSMakeSize(100, 400);
    NSLog(@"%f, %f", s1.width, s1.height);
    
    1
    2

# NSRect

  • CGRect 是一个结构体,它表示一个二维矩形区域。也有同样作用的方法NSRect,建议使用CGRect
  • 创建1:NSRect r2 = {20, 30, 40, 50};
  • 创建2:CGRectMake(x, y, width, height)
  • 判断结构体是否相等:CGRectEqualToRect(rect1, rect2)
  • 判断结构体是否包含另一个矩形:CGRectContainsRect(rect1, rect2)
  • 获取结构体中的x、y、width和height值:rect.origin.xrect.origin.yrect.size.widthrect.size.height
  • 创建1:NSRect r2 = {20, 30, 40, 50};
    NSRect r2 = {10, 10, 100, 200};
    
    1
  • 创建2:CGRectMake(x, y, width, height)
    NSRect r1 = NSMakeRect(10, 10, 100, 200);
    
    1
  • 判断结构体是否包含另一个矩形:CGRectContainsRect(rect1, rect2)
    BOOL res = NSContainsRect(r1, r2);
    
    1

# NSValue

  • NSValue 是一个对象,它表示一个值。它提供了一种方便的方式来表示各种类型的值,如CGPointCGSizeCGRect等。
  • 创建:NSValue valueWithCGPoint:NSValue valueWithCGSize:NSValue valueWithCGRect:
  • 获取:CGPointValueCGSizeValueCGRectValue
  • 判断:isEqualToValue:
NSRect r1 = NSMakeRect(10, 10, 100, 200);
NSRect r2 = {10, 10, 100, 200};
BOOL res = NSContainsRect(r1, r2);
NSLog(@"%d", res);

NSValue* v1 = [NSValue valueWithRect: r1];
NSValue* v2 = [NSValue valueWithRect: r2];
BOOL res2 = [v1 isEqualToValue: v2];
NSLog(@"%f", v1.rectValue.size.width);
1
2
3
4
5
6
7
8
9

# NSDate

  • NSDate 是一个对象,它表示一个特定的时间点。它提供了一种方便的方式来表示日期和时间,并支持许多常见的操作,如比较、格式化等。
  • 创建:[NSDate new]
  • 格式化输出:[NSDateFormatter new]
  • 日期NSString转NSDate:[format dateFromString:@"2025-04-24"]
  • 当前时间增加/减少秒数:dateWithTimeIntervalSinceNow:
  • 比较两个时间之差:[date1 timeIntervalSinceDate:date2]
  • 获取年月日:NSCalendar
  • 格式化输出:[NSDateFormatter new]
    NSDate* d1 = [NSDate new];
    NSDateFormatter* f1 = [NSDateFormatter new];
    [f1 setDateFormat:@"yyyy-MM-dd"];
    NSString* str = [f1 stringFromDate:d1];
    NSLog(@"%@", str); // 2025-04-24
    
    1
    2
    3
    4
    5
  • 日期NSString转NSDate:[format dateFromString:@"2025-04-24"]
    NSString* s1 = @"2025-04-24 12:00:00 +0800";
    NSDateFormatter* f1 = [NSDateFormatter new];
    [f1 setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSDate* d2 = [f1 dateFromString:s1];
    NSLog(@"%@", d2); // Thu Apr 24 12:00:00 2025
    
    1
    2
    3
    4
    5
  • 当前时间增加秒数:dateWithTimeIntervalSinceNow:
    NSDate* d3 = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 8];
    NSLog(@"%@", d3); // 当前时间+8小时:Thu Apr 24 15:46:42 2025
    
    1
    2
  • 比较两个时间之差:[date1 timeIntervalSinceDate:date2]
    NSString* str = @"";
    NSDate* d1 = [NSDate new];
    for (int i = 0; i < 50000; i++) {
        str = [NSString stringWithFormat:@"%@%d", str, i];
    }
    NSDate* d2= [NSDate new];
    NSTimeInterval interval = [d2 timeIntervalSinceDate:d1];
    NSLog(@"%f", interval); // 1.655952
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 获取年月日:NSCalendar
    NSDate* d1 = [NSDate new];
    NSCalendar* c1 = [NSCalendar currentCalendar];
    NSDateComponents* c2 = [c1 components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:d1];
    NSLog(@"%ld-%ld-%ld", c2.year, c2.month, c2.day); // 2025-4-24
    
    1
    2
    3
    4
上次更新: 4/24/2025