Objective-C---Foundation框架

10 篇文章 0 订阅


一、结构体

           NSRange:表示范围,location位置(unsignedlong),length长度(unsigned long)

            NSPoint\CGPoint:表示一个点,x(CGFloat\double),y(CGFloat\double)

        NSSize\CGSize:表示ui的尺寸,width宽度(CGFloat\double),height高度(CGFloat\double)

         NSRect\CGRect:表示位置大小,CGPoint和CGSize

[objc]  view plain cop
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const charchar * argv[])  
  4. {  
  5.     // NSRange  
  6.     //@"i love oc" // love的范围  
  7.     // 位置2,长度4  
  8.     NSRange r1 = {24};  
  9.     NSRange r2 = {.location = 2.length = 4};  
  10.     NSRange r3 = NSMakeRange(24); // 需要掌握  
  11.       
  12.     NSString *str = @"i love oc";  
  13.       
  14.     // 查找某个字符串在特定字符串的范围  
  15.     // 如果找不到,length = 0,location = NSNotFound == -1  
  16.     NSRange range = [str rangeOfString:@"love"];   
  17.       
  18.     // NSPoint\CGPoint  
  19.     NSPoint p1 = NSMakePoint(1111);  
  20.     CGPoint p2 = CGPointMake(11); // 最常用  
  21.     // CG开头函数是在CoreGraphics框架定义的,运行时需要将其加入  
  22.       
  23.     // 表示原点  
  24.     //CGPointZero == CGPointMake(0, 0)  
  25.       
  26.     // 点与点比较  
  27.     CGPointEqualToPoint(CGPointMake(11), CGPointMake(1111));  
  28.       
  29.     // NSSize\CGSize  
  30.     NSSize s1 = NSMakeSize(11);  
  31.     CGSize s2 = CGSizeMake(1111); // 开发中常用CG  
  32.       
  33.     //CGSizeZero == CGSizeMake(0, 0)  
  34.       
  35.     // 比较尺寸  
  36.     CGSizeEqualToSize(CGSizeMake(11), CGSizeMake(11));  
  37.       
  38.     // NSRect\CGRect  
  39.     CGRect rt1 = CGRectMake(001010);  
  40.     CGRect rt2 = {{00}, {1111}};  
  41.       
  42.     //CGRectZero == CGRectMake(0, 0, 0, 0)  
  43.       
  44.     // CGRect比较  
  45.     CGRectEqualToRect(CGRectMake(0011), CGRectMake(0011));  
  46.       
  47.     // CGRect是否包含点  
  48.     CGRectContainsPoint(CGRectMake(11112222), CGPointMake(3333));  
  49.       
  50.     // 将结构体装化为字符串  
  51.     NSString *str1 = NSStringFromRange(r1);  
  52.     NSLog(@"%@", str1);  
  53.     NSString *str2 = NSStringFromPoint(p1);  
  54.     NSLog(@"%@", str2);  
  55.     NSString *str3 = NSStringFromSize(s1);  
  56.     NSLog(@"%@", str3);  
  57.     NSString *str4 = NSStringFromRect(rt1);  
  58.     NSLog(@"%@", str4);  
  59.       
  60.     return 0;  
  61. }  

 

二、Foundation中的常用类

           NSString:不可变字符串

         NSMutableString:可变字符串

 

[objc]  view plain copy
  1. /* 
  2.  NSString:不可变字符串 
  3.  NSMutableString:可变字符串 
  4.  */  
  5. // 1.字符串的创建  
  6. NSString *s1 = @"jack";  
  7. NSString *s2 = [[NSString alloc] initWithString:s1];  
  8. NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 11];  
  9.   
  10. // c字符串转oc字符串  
  11. NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];  
  12.   
  13. // oc字符串转c字符串  
  14. const charchar *cs = [s4 UTF8String];  
  15.   
  16. // 从文件中读取内容  
  17. NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/hhb/Documents/code/other/other/main.m" encoding:NSUTF8StringEncoding error:nil];  
  18.   
  19. //URL:资源路径  
  20. // 协议头://路径  
  21. // 本地资源 file://  
  22. // ftp://  
  23. // http://  
  24. NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];  
  25. //file:///Users/zhouxf/Documents/code/other/other/main.m  
  26. NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];  
  27.   
  28. NSLog(@"%@", s6);  
  29. /* 
  30.  NSString类中有对象方法initWithXXX,一般就有对应的对象方法stringWithXXX与之配对 
  31.  其他类也是如此 
  32.  [NSString stringWithFormat:<#(NSString *), ...#>] == [[NSString alloc] initWithFormat:<#(NSString *), ...#>] 
  33.  */  
  34.   
  35. // 将字符串写入文件,writeToFile\writeToURL  
  36. [@"jack\nrose" writeToFile:@"/Users/hhb/Documents/code/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];  
  37.   
  38. // 拼接内容到字符串后创建新字符串  
  39. NSString *ns = [s1 stringByAppendingString:@"rose"];  
  40.   
  41. // 可变字符串  
  42. NSMutableString *ms1 = [NSMutableString stringWithFormat:@"age is 10"];  
  43.   
  44. // 直接将拼接到可变字符串后面  
  45. [ms1 appendFormat:@"%d %d"11, 1];  
  46.   
  47. // 删除某个范围的字符串  
  48. NSRange range = [ms1 rangeOfString:@"is"];  
  49. [ms1 deleteCharactersInRange:range];  


        (NSArray、NSSet、NSDictionary统称为集合类)

         NSArray:不可变数组

         NSMutableArray:可变数组

               -->   有序;

               -->   快速创建(不可变):@[obj1,obj2, obj3]

               -->   快速访问元素:数组名[i]

[objc]  view plain copy
  1. // 集合类  
  2. /* 
  3.  NSArray:不可变数组 
  4.  NSMutableArray:可变数组 
  5.  */  
  6. // oc数组不能存放nil值  
  7. // oc数组只能存放oc对象、不能存放非oc对象类型,比如int、struct、enum等  
  8.   
  9. //这个array就是空数组,而且不可变  
  10. //NSArray *array = [NSArray array];  
  11.   
  12. NSArray *array2 = [NSArray arrayWithObject:@"jack"];  
  13. // nil是数组元素结束的标记  
  14. NSArray *array3 = [NSArray arrayWithObjects:@"jack"@"rose"@"jim", nil nil];  
  15.   
  16. // 快速创建oc数组对象,编译器特性  
  17. NSArray *array4 = @[@"jack"@"rose"];  
  18.   
  19. // 获取数组元素个数  
  20. //[array2 count];  
  21. NSLog(@"%ld", array2.count);  
  22.   
  23. // 访问数组元素  
  24. NSLog(@"%@", [array3 objectAtIndex:1]);  
  25. NSLog(@"%@", array3[1]); // 编译器新特性,使用c数组访问方式  
  26.   
  27. // 遍历数组  
  28. for (int i = 0; i < array3.count; i++) {  
  29.     NSLog(@"%@", array3[i]);  
  30. }  
  31.   
  32. // 快速遍历数组  
  33. // id obj 代表着数组中的每一个元素  
  34. for (id obj in array3) {  
  35.     // obj在数组中的位置  
  36.     NSUInteger i = [array3 indexOfObject:obj];  
  37.     NSLog(@"%ld:%@", i, obj);  
  38. }  
  39.   
  40. // 每遍历一个元素就调用一次block  
  41. // 并且把当前元素和位置当作参数传给block  
  42. // stop:停止标志符, *stop = YES时停止遍历  
  43. [array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {  
  44.     NSLog(@"%ld:%@", idx, obj);  
  45.       
  46.     if (idx == 1) {  
  47.         *stop = YES;  
  48.     }  
  49. }];  
  50.   
  51. // 创建可变数组  
  52. NSMutableArray *ma = [NSMutableArray arrayWithObjects:@"rose"@"jim", nil nil];  
  53.   
  54. // 增加元素  
  55. [ma addObject:@"jack"];  
  56. [ma addObject:@"jack1"];  
  57. [ma addObject:@"jack2"];  
  58.   
  59. // 删除指定对象的元素  
  60. [ma removeObject:@"jim"];  
  61.   
  62. // 删除指定位置的元素  
  63. [ma removeObjectAtIndex:0];  
  64.   
  65. // 删除最后元素  
  66. [ma removeLastObject];  
  67.   
  68. // 删除所有元素  
  69. [ma removeAllObjects];  


               NSSet:不可变set

            NSMutableSet:可变set  无序

           与NSArray比较:

            -->  共同点

                 都是集合,都能存放多个oc对象

                 只能存放oc对象,不能存放非oc对象(int、char、float等,结构体,枚举)

                 本身不可变,都有一个可变的子类

           --> 不同点

                 NSArray有序,NSSet无序

[objc]  view plain copy
  1. /* 
  2.  NSSet:不可变set 
  3.  NSMutableSet:可变字set 
  4.  */  
  5. // 创建不可变set  
  6. NSSet *set1 = [NSSet setWithObjects:@"jack"@"rose", nil nil];  
  7.   
  8. // 随机访问一个元素  
  9. NSString *str = [set1 anyObject];  
  10.   
  11. // 创建可变set  
  12. NSMutableSet *mset = [NSMutableSet set];  
  13.   
  14. // 增加元素  
  15. [mset addObject:@"jack"];  
  16. [mset addObject:@"jack1"];  
  17.   
  18. // 删除元素  
  19. [mset removeObject:@"jack"];  


                NSDictionary:不可变字典

            NSMutableDictionary:可变字典

                 -->  无序

                 -->  快速创建(不可变):@{key1:obj1,key2:obj2, key3:obj3}

                 -->  快速访问元素:字典名[key]

[objc]  view plain copy
  1. /* 
  2.  NSDictionary:不可变字典 
  3.  NSMutableDictionary:可变字典 
  4.  */  
  5. // 创建不可变字典  
  6. NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];  
  7.   
  8. NSArray *keya = @[@"name"@"age"@"address"];  
  9. NSArray *obja = @[@"jack"@11@"北京"];  
  10. NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:obja forKeys:keya];  
  11.   
  12. NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:  
  13.                       @"jack"@"name",  
  14.                       @"北京"@"address"  
  15.                       ,nil];  
  16.   
  17. // 快速创建字典,编译器特性  
  18. NSDictionary *dict4 = @{@"name"@"jack"@"address"@"北京"};  
  19.   
  20. // 访问元素  
  21. [dict objectForKey:@"name"];  
  22.   
  23. // 快速访问元素,编译器特性  
  24. id obj = dict[@"name"];  
  25.   
  26. // 创建可变字典  
  27. NSMutableDictionary *md = [NSMutableDictionary dictionary];  
  28.   
  29. // 增加或更新元素  
  30. [md setObject:@"jack" forKey:@"name"];  
  31. [md setObject:@"北京" forKey:@"address"];  
  32. [md setObject:@"rose" forKey:@"name"];  
  33. [md setObject:@"1111" forKey:@"qq"];  
  34.   
  35. // 删除元素  
  36. [md removeObjectForKey:@"name"];  
  37.   
  38. NSLog(@"%@", md);  
  39.   
  40. // 遍历  
  41. NSArray *ka = [md allKeys];  
  42. for (int i = 0; i < md.count; i++) {  
  43.     NSLog(@"%@:%@", ka[i], md[ka[i]]);  
  44. }  
  45.   
  46. // 遍历  
  47. [md enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOLBOOL *stop) {  
  48.     NSLog(@"%@=%@", key, obj);  
  49. }];  


                  NSNumber:数字类,将数字包装成oc对象

              数字转NSNumber

                      NSNumber *num = [NSNumbernumberWithInt:11];

              NSNumber转数字

                     int i =[num intVaule];

            

             快速创建NSNumber对象,编译器特性

                     @20;

                      @10.1; 

                      @YES; 

                      @’a’; 

                      int age = 20; @(age);

 

             NSVaule:能将任何数据类型都能包装成oc对象

            将结构体CGPoint包装成NSVaule对象

                   NSVaule *v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];

            从NSVaule对象获取CGPoint的值

                   [v pointVaule];

 

            NSDate:日期类

[objc]  view plain copy
  1. /* 
  2.  NSDate:日期类 
  3.  */  
  4. // 创建时间对象(当前时间)  
  5. NSDate *date = [NSDate date];  
  6.   
  7. // 打印的时0时区时间  
  8. NSLog(@"%@", date);  
  9.   
  10. // 创建比date晚5秒的时间对象  
  11. NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];  
  12.   
  13. // 计算utc时间,单位:秒  
  14. /*double*/NSTimeInterval sec = [date2 timeIntervalSince1970];  
  15.   
  16. // 日期格式化类  
  17. NSDateFormatter *df = [[NSDateFormatter alloc] init];  
  18.   
  19. // 设计日期格式  
  20. // y 年 M 月 d 日  
  21. // m 分 s 秒 H (24)时 h (12)时  
  22. df.dateFormat = @"yyyy-MM-dd HH:mm:ss";  
  23.   
  24. // 日期转字符串  
  25. NSString *ds = [df stringFromDate:date2];  
  26.   
  27. NSLog(@"%@", ds);  
  28.   
  29. NSString *time = @"2011/11/11 11:11";  
  30. df.dateFormat = @"yyyy/MM/dd HH:mm";  
  31.   
  32. // 字符串转时间  
  33. NSDate *dt = [df dateFromString:time];  
  34.   
  35. NSLog(@"%@", dt);  

 

             练习:计算代码行数

[objc]  view plain co

  1. #import <Foundation/Foundation.h>  
  2.   
  3. NSUInteger linesFromFile(NSString *path)  
  4. {  
  5.     // 获取文件管理者(单列对象)  
  6.     NSFileManager *fm = [NSFileManager defaultManager];  
  7.       
  8.     // 是否是目录标志符  
  9.     BOOL isDir = NO;  
  10.     // 判断路径是否存在  
  11.     BOOL isEx = [fm fileExistsAtPath:path isDirectory:&isDir];  
  12.       
  13.     // 路径不存在  
  14.     if (!isEx) {  
  15.         NSLog(@"the file of path:%@ is no exist!", path);  
  16.         return 0;  
  17.     }  
  18.       
  19.     // 是目录  
  20.     if (isDir) {  
  21.         NSUInteger count = 0;  
  22.         // 获取目录中的内容:即文件和子目录  
  23.         NSArray *nameArray = [fm contentsOfDirectoryAtPath:path error:nil];  
  24.           
  25.         // 遍历  
  26.         for (NSString *name in nameArray) {  
  27.             // 拼接全路径  
  28.             NSString *fileName = [NSString stringWithFormat:@"%@/%@", path, name];  
  29.             // 递归计算行数  
  30.             count += linesFromFile(fileName);  
  31.         }  
  32.           
  33.         return count;  
  34.     } else {  
  35.         // 获取文件扩展名(忽略大小写)  
  36.         NSString *extension = [[path pathExtension] lowercaseString];  
  37.           
  38.         // 对文件进行过滤  
  39.         if (![extension isEqualToString:@"h"]  
  40.             && ![extension isEqualToString:@"c"]  
  41.             && ![extension isEqualToString:@"m"]) {  
  42.             return 0;  
  43.         }  
  44.           
  45.         // 读取文件内容  
  46.         NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];  
  47.           
  48.         // 通过换行符分割  
  49.         NSArray *fileLines = [fileContents componentsSeparatedByString:@"\n"];  
  50.           
  51.         // 去掉文件的公共路径  
  52.         NSRange range = [path rangeOfString:@"/Users/hhb/Documents/code/"];  
  53.         NSString *file = [path stringByReplacingCharactersInRange:range withString:@""];  
  54.           
  55.         // 打印文件路径和行数  
  56.         NSLog(@"%@:%ld", file, fileLines.count);  
  57.           
  58.         // 返回行数  
  59.         return fileLines.count;  
  60.     }  
  61. }  
  62.   
  63. int main(int argc, const charchar * argv[])  
  64. {  
  65.     NSString *path = @"/Users/hhb/Documents/code";  
  66.     NSUInteger count = linesFromFile(path);  
  67.     NSLog(@"lines count = %ld", count);  
  68.     return 0;  
  69. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值