zoukankan      html  css  js  c++  java
  • IOS开发学习笔记016-Foundation框架

     Foundation 框架的学习

    一、Foundation 常用结构体

      1、NSRange(location,length)  

    1 typedef struct _NSRange {
    2     NSUInteger location; // unsigned long
    3     NSUInteger length; // unsigned long
    4 } NSRange;

      使用注意     

    1     NSRange r1 = {2,4}; // 结构体格式的初始化
    2 
    3     NSRange r2 = {2,6};
    4 
    5     // NSRange 的函数,用来初始化NSRange
    6 
    7     NSRange r3 = NSMakeRange(2, 4); // 推荐这种方式初始化
    1     NSString *str = @"i love oc";
    2     // rangeOfString 查找某个字符串在字符串中得范围
    3     NSRange r4 = [str rangeOfString:@"love"]; // 2 ,4 
    4     NSLog(@"location:%ld,length:%ld",r4.location,r4.length);

      如果找不到字符串,length ==  0,location == NSNotFound == -1

      2、NSPointCGPoint

    1 struct CGPoint {
    2   CGFloat x; // double类型
    3   CGFloat y; // double类型
    4 };
    5 typedef struct CGPoint CGPoint;
    1     CGPoint p1 = NSMakePoint(10, 20);
    2     NSPoint p2 = CGPointMake(20, 10);//常用这个

         3、NSSzieCGSize

    1 struct CGSize {
    2   CGFloat width;
    3   CGFloat height;
    4 };
    5 typedef struct CGSize CGSize;
    1  // 初始化
    2     CGSize s1 = CGSizeMake(10, 20);
    3     NSSize s2 = NSMakeSize(20, 10);
    4     NSSize s3 = CGSizeMake(20, 11);

         4、NSRectCGRect

    struct CGRect {
      CGPoint origin; // 初始点
      CGSize size; // 宽度和高度
    };
    typedef struct CGRect CGRect;
       // 初始化
        CGRect r1 = CGRectMake(10, 20, 30, 40);
        NSRect r2 = NSMakeRect(201, 10, 45, 23);
       

       5、常用函数 

      输出这些结构体,只需要把这些结构退转换成字符串输出即可,系统提供的有函数

     1     // 输出这些结构体,只需要把这些结构退转换成字符串
     2     NSString *strp =  NSStringFromPoint(p1); // point
     3     NSLog(@"%@",strp);
     4     
     5     strp = NSStringFromRange(r4); // range
     6     NSLog(@"%@",strp);
     7     
     8     strp = NSStringFromSize(s1); // size
     9     NSLog(@"%@",strp);
    10 
    11     strp = NSStringFromRect(r1); // rect
    12     NSLog(@"%@",strp);

      原点输出,系统自带的

      // 原点 {0 , 0}
        CGPoint p3 =  CGPointZero; // == CMakePoint(0,0)

       比较

     1     // 比较两个点是否一样
     2     BOOL b = CGPointEqualToPoint(p1, p2);
     3     b = CGSizeEqualToSize(s1, s2);
     4     b = CGRectEqualToRect(r1, r2);
     5     
     6     // 需要添加CoreGraphics框架
     7     // 判断点是否在矩形块内
     8     b = CGRectContainsPoint(CGRectMake(50, 0, 150, 200), CGPointMake(190, 200));
     9     
    10     NSLog(@"%d",b);

     二、字符串

        NSString  不可变字符串,不能修改

        NSMutableString 可变字符串,可以增删字符。继承自NSString

      1、字符串的创建

     1     // 字符串的创建
     2     NSString *s1 = @"hello";
     3     NSString *s2 =[[NSString alloc] initWithFormat:@"age is %d",10];
     4     NSString *s3 = [[NSString alloc] initWithUTF8String:"world"]; //c语言字符串转换OC字符串
     5     const char *cs = [s3 UTF8String];  // oc字符串转换C字符串
     6     
     7     // 读取文件内容到字符串
     8     // NSUTF8StringEncoding 用到中文就可以用这样的编码
     9     NSString *s4 = [[NSString alloc] initWithContentsOfFile:@"/Users/song/Desktop/1.m" encoding:NSUTF8StringEncoding error:nil];
    10     
    11     NSLog(@"s4 = %@",s4);
    12     
    13     // url 资源路径
    14     // 协议头://路径
    15     // http://www.qq.com//a.png
    16     // file:// 本地
    17     // ftp://
    18     //
    19     NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/song/Desktop/1.m"];
    20     NSURL *url1 = [NSURL fileURLWithPath:@"file:///Users/song/Desktop/1.m"];
    21     NSString *s5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    22     NSLog(@"s5 = %@",s5);
    23     
    24     //
    25     url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
    26     NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    27     NSLog(@"s6 = %@",s6);
    28     
    29     // 相关的各种类方法,灵活运用,以类开头
    30     [NSString stringWithFormat:@""];
    31     [NSString stringWithContentsOfFile:@"file:///Users/song/Desktop/1.m" encoding:NSUTF8StringEncoding error:nil];
    32     [NSURL URLWithString:@"file:///Users/song/Desktop/1.m"];
    33     [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    34     

      2、字符串的导出

    1     // 字符串导出
    2     [@"hello
     world" writeToFile:@"/Users/song/Desktop/1.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    3     [@"haha haha" writeToURL:@"/Users/song/Desktop/2.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    4    

        3、可变与不可变的区别

     1   
     2     NSString *s1 = [NSString stringWithFormat:@"age is %d",10]; // 不可变字符串
     3     NSMutableString *s2 = [NSMutableString stringWithFormat:@"age is %d",10]; // 可变字符串
     4     
     5     NSLog(@"s1 = %@",s1);
     6     NSLog(@"s2 = %@",s2);
     7     
     8     [s2 appendFormat:@" 11 23"]; // 增加字符
     9     
    10     NSLog(@"_______________");
    11     
    12     NSRange r1 = [s2 rangeOfString:@"is"]; // 查找字符串“is”的range
    13     [s2 deleteCharactersInRange:r1];// 删除字符
    14     
    15     NSLog(@"s1 = %@",s1);
    16     NSLog(@"s2 = %@",s2);
    17  
    18     // 重新创建一个字符串 返回一个新的字符串
    19     NSString *s3 = [s1 stringByAppendingString:@" 32"];
    20     NSLog(@"s3 = %@",s3);

    三、数组类

      1、不可变数组 NSArrray

      创建数组  

     1   
     2     // nil 是数组结束标标记
     3     NSArray *array1 = [NSArray arrayWithObjects:@"hello", nil];
     4     NSArray *array2 = [NSArray arrayWithObjects:@"hello",@"world", nil];
     5 
     6     NSLog(@"%ld",array2.count); // 数组元素个数
     7     NSLog(@"%@",[array2 objectAtIndex:0]); // 获取数组元素
     8     
     9     NSLog(@"%@",array2[1]); // 获取数组元素
    10     
    11     Person *p = [[Person alloc] init];
    12     // 快速创建一个数组
    13     NSArray *array3 = @[p,@"hello",@"world!",@"la la la !"];

      遍历数组

     1   // 遍历1
     2     for(int i = 0 ; i < array3.count ; i ++ )
     3     {
     4         NSLog(@"%d--%@",i,array3[i]);
     5     }
     6     // 遍历2
     7     for(id obj in array3)
     8     {
     9         NSUInteger i = [array3 indexOfObject:obj];
    10         NSLog(@"%ld___%@",i,obj);
    11     }
    12     // 遍历3 block
    13     [array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
    14     {
    15         NSLog(@"%ld=>%@",idx,obj);
    16         if(idx == 1)
    17         {
    18             // 停止遍历
    19             *stop = YES;
    20         }
    21     }];

       2、可变数组  NSMutableArray

     1 // 可变数组的使用
     2 void NSMutableArrayTest()
     3 {
     4     NSMutableArray *array = [NSMutableArray array];
     5     [array addObject:[[Person alloc] init]]; // 添加对象
     6     [array addObject:@"hello"]; // 添加元素
     7     [array addObject:@"world"];
     8     [array removeObject:@"hello"]; // 删除元素
     9     NSLog(@"%ld",array.count);
    10     
    11     [array removeObjectAtIndex:0]; // 使用索引删除指定元素
    12     NSLog(@"%@",array);
    13     
    14     // 错误写写法
    15     // @[] 只用来创建不可变数组NSArray
    16     // NSMutableArray *array = @[@"hello",@"world"];
    17     
    18     // [array addObject:@"hello"];
    19 }

    四、练习:读取文件行数

    主要练习以下三个类型的使用
    NSString NSArray NSFileManage
      1 //  main.m
      2 //  11_计算代码行数
      3 //
      4 //  Created by Christian on 15/4/19.
      5 //  Copyright (c) 2015年 Christ. All rights reserved.
      6 //
      7 
      8 #import <Foundation/Foundation.h>
      9 
     10 
     11 /*
     12  NSString 
     13  NSArray
     14  NSFileManage
     15  
     16  */
     17 
     18 /*
     19  函数名:   codeLineCount
     20  参数:    文件路径 path,文件夹或者文件
     21  返回值:   行数
     22  */
     23 NSUInteger codeLineCount(NSString *path);
     24 
     25 int main()
     26 {
     27     NSString *path = @"/Users/song/Desktop/OC/";
     28     NSUInteger count =  codeLineCount(path);
     29     NSLog(@"%ld",count);
     30     return 0;
     31 }
     32 
     33 
     34 NSUInteger codeLineCount(NSString *path)
     35 {
     36     // 1、获得文件管理者,单例模式,只有一个对象
     37     NSFileManager *mgr = [NSFileManager defaultManager];
     38     // 2、判断是文件夹还是文件
     39     BOOL dir = NO; // 标记是否是文件夹
     40     BOOL exit = [mgr fileExistsAtPath:path isDirectory:&dir];
     41     // 3、路径不存在,直接返回0
     42     if(!exit)
     43     {
     44         return 0;
     45     }
     46       // 4、路径存在
     47     if(dir) // 是个文件夹
     48     {
     49         //NSLog(@"文件夹");
     50         // 获取当前目录中得所有文件夹、文件
     51         NSArray *array  = [mgr contentsOfDirectoryAtPath:path error:nil];
     52        // NSLog(@"%@",array);
     53         int count = 0;
     54         
     55         for(NSString *filename in array)
     56         {
     57             // 获取全路径
     58             NSString *fullpath  = [NSString stringWithFormat:@"%@/%@",path,filename ];
     59            // NSLog(@"%@",fullpath);
     60             count += codeLineCount(fullpath); // 递归调用
     61         }
     62         return count;
     63         
     64     }
     65     else // 是个文件
     66     {
     67         
     68         
     69         // 5、判断文件的扩展名(忽略大小写)
     70         NSString *extention = [[path pathExtension] lowercaseString]; // 扩展名转换成小写
     71         // 不是.h/.c/.m
     72         if(         ![extention isEqualToString:@"h"]
     73                 &&  ![extention isEqualToString:@"m"]
     74                 &&  ![extention isEqualToString:@"c"] )
     75                 {
     76                     return 0;
     77                 }
     78         //NSLog(@"文件");
     79         // 2、加载文件
     80         NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
     81     
     82    
     83         //NSLog(@"%@",content);
     84         // 3、切割字符串
     85         NSArray *array = [content componentsSeparatedByString:@"
    "]; // 以
     分割整个字符串,返回数组保存每行的字符串
     86     
     87         NSRange range = [path rangeOfString:@"/Users/song/Desktop/OC/"];
     88         NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
     89         
     90         NSLog(@"%@-%ld",str,array.count);
     91         // 输出文件
     92        /*
     93         for (NSString *line in array)
     94         {
     95             NSLog(@"%@",line);
     96         }*/
     97         return array.count;
     98     }
     99   
    100     return 0;
    101    
    102 }

    五、集合类

    NSSet/NSMutableSet

      1、不可变集合

     1   // 不可变集合
     2     NSSet *set1  = [NSSet set]; // 这样初始化后set不可改变,所以不这样初始化
     3     
     4     NSSet *set2 = [NSSet setWithObject:@"hello"]; // 初始化单个元素
     5     NSSet *set3 = [NSSet setWithObjects:@"hello",@"world",@"what",@"a",@"luck",@"day", nil]; // 初始化多个元素
     6     NSSet *set4 = [NSSet setWithSet:set3]; // 以一个set初始化一个set
     7     
     8     NSString *str1 = [set4 anyObject]; // 获取一个随机元素
     9     
    10     NSLog(@"%@",str1);

      2、可变集合

    1   // 不可变集合
    2     NSMutableSet *mset1 = [NSMutableSet set]; // 定义并初始化一个set
    3     
    4     [mset1 addObject:@"hello"]; // 增加一个元素
    5     
    6     //[mset1 removeObject:@"hello"]; // 删除一个元素
    7     NSString *s = [mset1 anyObject];
    8     NSLog(@"%@",s); 

      3、NSSet 和 NSArray 区别

         NSSet 和 NSArray 

         1、共同点

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

            只能存放OC对象,不能存放非OC对象,(基本数据类型:int 结构体、枚举等)

         2、不同点

            NSArray 有序,NASet无序

     六、字典

      1、不可变NSDictionary

    里面存储的东西都是键值对
      key ----> value
      索引 ----> 文字内容

     1     // 定义一个字典1
     2     // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"hello" forKey:@"name"];
     3     
     4     // 定义一个字典2
     5     NSArray *keys = @[@"name",@"address",@"number"];
     6     NSArray *values  = @[@"Song",@"BeiJing",@"110"];
     7     NSDictionary *dict1 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
     8     
     9     id obj = [dict1 objectForKey:@"name"];
    10     NSLog(@"%@",obj);
    11     // 定义一个字典3,不建议这样写,难以理解
    12     NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:
    13                            @"wang",@"name",
    14                            @"henan",@"address", nil];
    15     
    16     id obj1 = [dict2 objectForKey:@"name"];
    17     NSLog(@"%@",obj1);
    18     // 定义一个字典4,推荐这样写,这是xcode封装的功能
    19     NSDictionary *dict3 = @{@"name":@"li",@"address":@"hubei"};
    20     
    21     //id obj3 = [dict3 objectForKey:@"name"];
    22     id obj3 = dict3[@"name"]; // xcode 功能,可以这样实现
    23     NSLog(@"%@",obj3);

       2、可变字典

    NSMutableDictionary

     1   // 可变键值对 字典
     2     NSMutableDictionary *mdict1 = [NSMutableDictionary dictionary];
     3     // 添加键值对
     4     [mdict1 setObject:@"hello" forKey:@"First"];
     5     [mdict1 setObject:@"world" forKey:@"Second"];
     6     // 移除键值对
     7     // [mdict1 removeObjectForKey:@"Second"];
     8     
     9     NSLog(@"%@",mdict1); //输出键值对*/
    10     /* 输出结果如下
    11      {
    12         First = hello;
    13         Second = world;
    14      }
    15 
    16      */

       3、字典遍历

     1   // 字典遍历
     2     // 遍历方式1
     3     NSDictionary *dict11 = @{@"name":@"zhou",@"address":@"henan",@"qq":@"32434"};
     4     
     5     NSArray *Arraykeys = [dict11 allKeys];
     6     // NSLog(@"%@",Arraykeys);
     7     for(int i = 0 ; i < dict11.count ; i ++)
     8     {
     9         NSString *key = Arraykeys[i];
    10         NSString *value = dict11[key];
    11         NSLog(@"%@---%@",key,value);
    12     }
    13     /* 输出结果是:
    14      2015-04-20 18:02:49.661 11_Foundation[787:35995] name---zhou
    15      2015-04-20 18:02:49.662 11_Foundation[787:35995] address---henan
    16      2015-04-20 18:02:49.662 11_Foundation[787:35995] qq---32434
    17      */
    18     // 遍历方式2
    19     [dict11 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop)
    20     {
    21         NSLog(@"%@---%@",key,obj);
    22     }];

       4、其他用法

     1     // 其他用法,多重嵌套
     2     NSArray *person = @[
     3                         @{ @"name":@"li",@"address":@[@"china",@"beijing",@"chaoyang"]},
     4                         @{ @"name":@"zhang",@"address":@"henan"},
     5                         @{ @"name":@"wang",@"address":@"tianjin"},
     6                         @{ @"name":@"song",@"address":@"beijing"}];
     7     
     8     NSDictionary *dict = person[2];
     9     NSLog(@"%@",dict);
    10     
    11     // 先取出数组位置1的字典,然后再取出key为name的value
    12     NSLog(@"%@",person[1][@"name"]);
    13     
    14     
    15     // 先取出数组位置0的字典,然后再取出key为name的value,再取出数组位置为0的元素
    16     NSLog(@"%@",person[0][@"address"][1]);
    17     

    集合总结

         1、NSArray 和 NSMutableArray

            有序

            快速创建(不可变)@[@"",@""];

            快速访问,:数组名[i];

         2、NSSet 和 NSMutableSet

            无序

         3、NSDictionary 和 NSMutableDictionary

            无序

            快速创建(不可变)@{@"key":@"value"};

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

    七、NSNumber(数字(intdoubleool)等类型包装成OC对象)

      1、包装数字到OC对象 NSNumber继承自NSValue

     1     /*
     2      NSNumber 包装数字到OC对象
     3      
     4      */
     5     // 将数字转换成OC对象
     6     NSNumber *num  = [NSNumber numberWithInt:10];
     7     NSDictionary *dict =  @{
     8       @"name":@"jack",
     9       @"age":num
    10       };
    11     // 取出对象
    12     NSNumber *num2 = dict[@"age"];
    13     // 将OC对象转换成数字
    14     int a = [num2 intValue];
    15     NSLog(@"%d",a);
    16     
    17     // 字符串转换成数字
    18     NSString *str = [NSString stringWithFormat:@"%d",222];
    19     int b = [str intValue];
    20     NSLog(@"%d",b);
    21     
    22     @20; // 将20转换成NSNumber对象
    23     @20.6;
    24     @YES;
    25     @'f'; // NSNumber
    26     @"A"; // NSString
    27     int age = 67;
    28     @(age); // 将变量转换成NSNumber

      2、将任意类型包装成OC对象 NSValue

     1     // 结构体包装成value对象
     2     CGPoint point  = CGPointMake(10, 20);
     3     // 将结构体包装成Value对象
     4     NSValue *va = [NSValue valueWithPoint:point];
     5     
     6     // 将value对象转换成对应的结构体
     7     CGPoint point1 = [va pointValue];
     8     
     9     NSArray *array = @[va]; // 再将对象添加到数组中
    10     

    八、日期格式化相关的类  NSDate/NSDateFormatter

     1   // 创建一个时间对象,默认是0时区的时间,格林威治时间
     2     NSDate *date = [NSDate date];
     3     NSLog(@"%@",date);
     4     // 在date的基础上延后5s
     5     NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
     6     NSLog(@"%@",date2);
     7 
     8     NSTimeInterval seconds = [date2 timeIntervalSince1970]; // 1970年开始到现在的秒数
     9     NSLog(@"%f",seconds);
    10     
    11     // 日期格式化类
    12     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    13     // y年 M月 d日
    14     // h(12)时 H(24)时 m分 s秒
    15     formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 设置时间显示格式
    16     NSString *str = [formatter stringFromDate:date]; // 时间转字符串
    17     
    18     NSLog(@"%@",str);
    19     
    20     // 字符串转换成时间
    21     NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
    22 
    23     NSString *time = @"1990/02/03 19:34";
    24     formatter2.dateFormat = @"yyyy/MM/dd HH:mm"; // 设置格式
    25     
    26     NSDate *da = [formatter2 dateFromString:time]; //转换
    27     NSLog(@"%@",da);
    28     

    终于这些基础知识看完了,可以进行下一步了。

    2015-04-20 今日如此,明日依旧。

  • 相关阅读:
    【二食堂】Alpha
    【二食堂】Alpha- 发布声明
    【Beta】Scrum Meeting 4
    【Beta】Scrum Meeting 3
    【Beta】Scrum Meeting 2
    【Beta】Scrum Meeting 1
    beta设计和计划
    alpha事后分析
    alpha项目展示
    Scrum Meeting 最终总结
  • 原文地址:https://www.cnblogs.com/songliquan/p/4439566.html
Copyright © 2011-2022 走看看