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、NSPoint\CGPoint

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、NSSzie\CGSize

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、NSRect\CGRect

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\n 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:@"\n"]; // 以\n 分割整个字符串,返回数组保存每行的字符串
 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(数字(int\double\bool)等类型包装成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 今日如此,明日依旧。

 

posted @ 2015-04-20 19:29  struggle_time  阅读(827)  评论(0编辑  收藏  举报