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 今日如此,明日依旧。
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/4439566.html