首页 > 代码库 > 黑马程序员——Foundation框架的小总结
黑马程序员——Foundation框架的小总结
一、Foundation框架—结构体
一、基本知识
Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础。
如果要想使用foundation框架中的数据类型,那么包含它的主头文件就可以了。即#import<foundation/foundation.h>
补充:core foundation框架相对底层,里面的代码几乎都是c语言的,而foundation中是OC的。
二、常用的结构体介绍及简单使用
常用的结构体:
(一)NSRang的基本使用
NSRange(location length) 表示范围
NSPoint\CGPoint 表示坐标
NSSize\CGSize 表示UI元素的尺寸
NSRect\CGRect (CGPint CGSize) 表示一个UI元素的位置和尺寸
创建变量
1 // 2 // main.m 3 // Foundation1-结构体 4 // 5 // Created by mj on 13-4-5. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 void test() {12 // 定义了Date这种结构体类型13 struct Date {14 int year;15 int month;16 int day;17 };18 19 // 定义结构体变量20 struct Date d = {2013, 4, 5};21 d.day = 6;22 }23 24 void test1() {25 typedef struct Date {26 int year;27 int month;28 int day;29 } MyDate;30 31 MyDate d = {2013, 4, 5};32 }33 34 void range() {35 NSRange range = NSMakeRange(8, 10);36 37 NSLog(@"location:%zi", range.location);38 NSLog(@"length:%zi", range.length);39 40 NSString *str = NSStringFromRange(range);41 NSLog(@"%@", str);42 // NSLog(@"%@", range); 错误的做法,%@代表着OC对象43 }44 45 void point() { 46 // NSPoint p;47 CGPoint p;48 p.x = 1;49 p.y = 10;50 51 p = NSMakePoint(10, 9);52 53 // 常见的方式54 p = CGPointMake(8, 9);55 56 NSString *str = NSStringFromPoint(p);57 NSLog(@"%@", str);58 }59 60 void size() {61 CGSize size; // NSSize size;62 size.width = 100;63 size.height = 90;64 65 size = NSMakeSize(90, 80);66 67 size = CGSizeMake(10, 8);68 69 NSString *str = NSStringFromSize(size);70 NSLog(@"%@", str);71 }72 73 void rect() {74 NSRect rect; // CGRect rect;75 rect.origin.x = 10;76 rect.origin.y = 11;77 78 rect.size.width = 100;79 rect.size.height = 90;80 81 rect = NSMakeRect(10, 10, 80, 80);82 83 rect = CGRectMake(8, 9, 10, 90);84 85 NSString *str = NSStringFromRect(rect);86 NSLog(@"%@", str);87 }88 89 int main(int argc, const char * argv[])90 {91 @autoreleasepool {92 rect();93 }94 return 0;95 }
二、Foundation框架—字符串
一、Foundation框架中一些常用的类
字符串型:
NSString:不可变字符串
NSMutableString:可变字符串
集合型:
1)
NSArray:OC不可变数组
NSMutableArray:可变数组
2)
NSSet:
NSMutableSet:
3)
NSDictiorary
NSMutableDictiorary
其它:
NSDate
NSObject
二、NSString和NSMutableString
种创建字符串的形式
1 #import <Foundation/Foundation.h> 2 3 #pragma mark NSString的创建 4 void stringCreate() { 5 // char *s = "A String!"; // C语言中的字符串 6 7 // 这种方式创建出来的字符串是不需要释放的 8 NSString *str1 = @"A String!"; 9 10 NSString *str2 = [[NSString alloc] init]; 11 str2 = @"A String!"; 12 [str2 release]; 13 14 NSString *str3 = [[NSString alloc] initWithString:@"A String!"]; 15 [str3 release]; 16 // 不需要管理内存 17 str3 = [NSString stringWithString:@"A String!"]; 18 19 20 NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"]; 21 [str4 release]; 22 str4 = [NSString stringWithUTF8String:"A String!"]; 23 24 NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 25 26 // 这句代码放在中间会造成2个错误: 27 // 1.前面创建的字符串没有被释放 28 // 2.后面创建的字符串会释放过度,造成野指针错误 29 // str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 30 31 NSLog(@"str5:%@", str5); 32 [str5 release]; 33 34 str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 35 } 36 37 void test(NSString **str) { 38 *str = @"123"; 39 // s = @"123"; 40 } 41 42 void stringCreate2() { 43 // 从文件中读取文本 44 NSString *path = @"/Users/apple/Desktop/test.txt"; 45 // 这个方法已经过期,不能解析中文 46 // NSString *str1 = [NSString stringWithContentsOfFile:path]; 47 48 // 定义一个NSError变量 49 NSError *error; 50 // 指定字符串编码为UTF-8: NSUTF8StringEncoding 51 NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; 52 if (error == nil) { // 没有错误信息 53 NSLog(@"读取文件成功:%@", str1); 54 } else { 55 NSLog(@"读取文件失败:%@", error); 56 } 57 58 NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"]; 59 NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 60 NSLog(@"%@", str2); 61 62 NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"]; 63 NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil]; 64 NSLog(@"%@", str3); 65 } 66 67 #pragma mark 字符串的导出 68 void stringExport() { 69 NSString *str = @"123456我是字符串!!!!"; 70 // 如果文件不存在,会自动创建文件 71 // 如果文件夹不存在,会直接报错 72 NSString *path = @"/Users/apple/Desktop/abc.txt"; 73 74 NSError *error; 75 // 编码指定错误也会报错 76 // YES代表要进行原子性操作,也就是会创建一个中间的临时文件 77 [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; 78 if (error) { 79 // [error localizedDescription]会返回主要的错误信息 80 NSLog(@"写入失败:%@", [error localizedDescription]); 81 } else { 82 NSLog(@"写入成功"); 83 } 84 } 85 86 //void test2(int *p) { 87 // *p = 9;// a = 9; 88 //} 89 90 int main(int argc, const char * argv[]) 91 { 92 93 @autoreleasepool { 94 // int a = 10; 95 // test2(&a); 96 // NSLog(@"%i", a); 97 98 stringExport(); 99 100 // NSString *s = @"456";101 // 102 // test(&s);103 // 104 // NSLog(@"%@", s);105 }106 return 0;107 }
1 // 2 // main.m 3 // NSString 4 // 5 // Created by mj on 13-4-5. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 #pragma mark NSString的创建 12 void stringCreate() { 13 // char *s = "A String!"; // C语言中的字符串 14 15 // 这种方式创建出来的字符串是不需要释放的 16 NSString *str1 = @"A String!"; 17 18 NSString *str2 = [[NSString alloc] init]; 19 str2 = @"A String!"; 20 [str2 release]; 21 22 NSString *str3 = [[NSString alloc] initWithString:@"A String!"]; 23 [str3 release]; 24 // 不需要管理内存 25 str3 = [NSString stringWithString:@"A String!"]; 26 27 28 NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"]; 29 [str4 release]; 30 str4 = [NSString stringWithUTF8String:"A String!"]; 31 32 NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 33 34 // 这句代码放在中间会造成2个错误: 35 // 1.前面创建的字符串没有被释放 36 // 2.后面创建的字符串会释放过度,造成野指针错误 37 // str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 38 39 NSLog(@"str5:%@", str5); 40 [str5 release]; 41 42 str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 43 } 44 45 void test(NSString **str) { 46 *str = @"123"; 47 // s = @"123"; 48 } 49 50 void stringCreate2() { 51 // 从文件中读取文本 52 NSString *path = @"/Users/apple/Desktop/test.txt"; 53 // 这个方法已经过期,不能解析中文 54 // NSString *str1 = [NSString stringWithContentsOfFile:path]; 55 56 // 定义一个NSError变量 57 NSError *error; 58 // 指定字符串编码为UTF-8: NSUTF8StringEncoding 59 NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; 60 if (error == nil) { // 没有错误信息 61 NSLog(@"读取文件成功:%@", str1); 62 } else { 63 NSLog(@"读取文件失败:%@", error); 64 } 65 66 NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"]; 67 NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 68 NSLog(@"%@", str2); 69 70 NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"]; 71 NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil]; 72 NSLog(@"%@", str3); 73 } 74 75 #pragma mark 字符串的导出 76 void stringExport() { 77 NSString *str = @"123456我是字符串!!!!"; 78 // 如果文件不存在,会自动创建文件 79 // 如果文件夹不存在,会直接报错 80 NSString *path = @"/Users/apple/Desktop/abc.txt"; 81 82 NSError *error; 83 // 编码指定错误也会报错 84 // YES代表要进行原子性操作,也就是会创建一个中间的临时文件 85 [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; 86 if (error) { 87 // [error localizedDescription]会返回主要的错误信息 88 NSLog(@"写入失败:%@", [error localizedDescription]); 89 } else { 90 NSLog(@"写入成功"); 91 } 92 } 93 94 //void test2(int *p) { 95 // *p = 9;// a = 9; 96 //} 97 98 int main(int argc, const char * argv[]) 99 {100 101 @autoreleasepool {102 // int a = 10;103 // test2(&a);104 // NSLog(@"%i", a);105 106 stringExport();107 108 // NSString *s = @"456";109 // 110 // test(&s);111 // 112 // NSLog(@"%@", s);113 }114 return 0;115 }
(四)URL补充内容
Url:资源路径
格式:协议头:/路径
网络路径协议头:http
本地文件以file为协议头
ftp为协议头,说明资源是ftp服务器上的。
三、Foundation框架—集合
1、NSArray和NSMutableArray
(一)NSArray不可变数组
(1)NSArray的基本介绍
NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。
C语言数组有一个缺点即数组中只能存放同种数据类型的元素。
OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等。
(二)NSMutableArray可变数组
(1)NSMutableArray的基本使用
注意:NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法。
1 #import <Foundation/Foundation.h> 2 #import "Person.h" 3 4 5 /* 6 7 NSArray :不可变数组 8 9 10 NSMutableArray : 可变数组 11 */ 12 13 int main() 14 { 15 // @[] 只创建不可变数组NSArray 16 /* 错误写法 17 NSMutableArray *array = @[@"jack", @"rose"]; 18 19 [array addObject:@"jim"]; 20 */ 21 22 23 //NSArray *array = @[@"jack", @"rose"]; 24 25 return 0; 26 } 27 28 // 可变数组的基本使用 29 void use3() 30 { 31 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; 32 33 // 添加元素 34 [array addObject:[[Person alloc] init]]; 35 36 [array addObject:@"jack"]; 37 38 // 删除元素 39 //[array removeAllObjects]; 40 // 删除指定的对象 41 // [array removeObject:@"jack"]; 42 [array removeObjectAtIndex:0]; 43 44 // 错误写法 45 // [array addObject:nil]; 46 47 48 NSLog(@"%@", array); 49 50 NSLog(@"%ld", array.count); 51 } 52 53 // 遍历数组 54 void use2() 55 { 56 Person *p = [[Person alloc] init]; 57 58 NSArray *array = @[p, @"rose", @"jack"]; 59 60 // for (int i = 0; i<array.count; i++) 61 // { 62 // NSLog(@"%@", array[i]); 63 // } 64 65 // id obj代表着数组中的每一个元素 66 //int i = 0; 67 // for (id obj in array) 68 // { 69 // // 找出obj元素在数组中的位置 70 // NSUInteger i = [array indexOfObject:obj]; 71 // 72 // NSLog(@"%ld - %@", i, obj); 73 // //i++; 74 // 75 // if (i==1) 76 // { 77 // break; 78 // } 79 // } 80 81 [array enumerateObjectsUsingBlock: 82 83 // 每遍历到一个元素,就会调用一次block 84 // 并且当前元素和索引位置当做参数传给block 85 ^(id obj, NSUInteger idx, BOOL *stop) 86 { 87 NSLog(@"%ld - %@", idx, obj); 88 89 90 if (idx == 0) 91 { 92 // 停止遍历 93 *stop = YES; 94 } 95 96 }]; 97 98 99 // void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)100 // {101 // NSLog(@"%ld - %@", idx, obj);102 //103 //104 // if (idx == 0)105 // {106 // // 停止遍历107 // *stop = YES;108 // }109 // };110 //111 // for (int i = 0; i<array.count; i++)112 // {113 // // 用来标记是否需要停止遍历114 // BOOL isStop = NO;115 //116 // // 取出元素117 // id obj = array[i];118 // 119 // myblock(obj, i, &isStop);120 // 121 // 122 // if (isStop)123 // {124 // break;125 // }126 // }127 128 }129 130 void use()131 {132 /*133 int a = 5;134 135 int ages[10] = {1, 90, 89, 17};136 137 Person *p = [[Person alloc] init];138 Person *persons[5] = {p, [[Person alloc] init]};139 */140 141 // OC数组不能存放nil值142 // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等143 144 // 这个array永远是空数组145 // NSArray *array = [NSArray array];146 147 148 /*149 1.NSArray的创建150 */151 NSArray *array2 = [NSArray arrayWithObject:@"jack"];152 153 // nil是数组元素结束的标记154 NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];155 // [array2 count];156 157 //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];158 159 // 快速创建一个NSArray对象160 NSArray *array4 = @[@"jack", @"rose", @"4324324"];161 162 163 /*164 2.NSArray的元素个数165 */166 NSLog(@"%ld", array3.count);167 168 169 /*170 3.NSArray中元素的访问171 */172 NSLog(@"%@", [array3 objectAtIndex:1]);173 174 //array3[1];175 NSLog(@"%@", array3[0]);176 }
2、NSSet和NSMutableSet
1.NSSet不可变集合
2.NSMutableSet可变集合
1 // 2 // main.m 3 // 05-NSSet 4 // 5 // Created by apple on 13-8-12. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 /*10 NSSet和NSArray的对比11 1> 共同点12 * 都是集合,都能存放多个OC对象13 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)14 * 本身都不可变,都有一个可变的子类15 16 2> 不同点17 * NSArray有顺序,NSSet没有顺序18 */19 20 #import <Foundation/Foundation.h>21 22 int main()23 {24 NSMutableSet *s = [NSMutableSet set];25 26 // 添加元素27 [s addObject:@"hack"];28 29 // 删除元素30 // [s removeObject:<#(id)#>];31 return 0;32 }33 34 // set的基本使用35 void test()36 {37 NSSet *s = [NSSet set];38 39 NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];40 41 // 随机拿出一个元素42 NSString *str = [s2 anyObject];43 44 NSLog(@"%@", str);45 46 //NSLog(@"%ld", s2.count);47 }
练习
//// main.m// 04-计算代码行数//// Created by apple on 13-8-12.// Copyright (c) 2013年 itcast. All rights reserved.///* * 考察NSString、NSArray的使用 * NSFileManager */#import <Foundation/Foundation.h>// 计算文件的代码行数/* path : 文件的全路径(可能是文件夹、也可能是文件) 返回值 int :代码行数 */NSUInteger codeLineCount(NSString *path){ // 1.获得文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; // 2.标记是否为文件夹 BOOL dir = NO; // 标记是否为文件夹 // 标记这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; // 3.如果不存在,直接返回0 if(!exist) { NSLog(@"文件路径不存在!!!!!!"); return 0; } // 代码能来到着,说明路径存在 if (dir) { // 文件夹 // 获得当前文件夹path下面的所有内容(文件夹、文件) NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 定义一个变量保存path中所有文件的总行数 int count = 0; // 遍历数组中的所有子文件(夹)名 for (NSString *filename in array) { // 获得子文件(夹)的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename]; // 累加每个子路径的总行数 count += codeLineCount(fullPath); } return count; } else { // 文件 // 判断文件的拓展名(忽略大小写) NSString *extension = [[path pathExtension] lowercaseString]; if (![extension isEqualToString:@"h"] && ![extension isEqualToString:@"m"] && ![extension isEqualToString:@"c"]) { // 文件拓展名不是h,而且也不是m,而且也不是c return 0; } // 加载文件内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 将文件内容切割为每一行 NSArray *array = [content componentsSeparatedByString:@"\n"]; // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/ NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"]; NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 打印文件路径和行数 NSLog(@"%@ - %ld", str, array.count); return array.count; }}int main(){ NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享"); NSLog(@"%ld", count); return 0;}void test(){ NSString *str = @"jack\nrose\njim\njake"; [str writeToFile:@"/Users/apple/Desktop/abc.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [str componentsSeparatedByString:@"\n"]; for (NSString *line in array) { NSLog(@"%@", line); } //int count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0811/代码/04-block/04-block/main.m"); //NSLog(@"count=%d", count);}
3、NSDictionary和NSMutableDictionary
(一)NSDictionary不可变字典
(1)介绍
现实中的字典:根据索引找到具体的内容
OC中的NSDictionary:根据key找到value。里面存储的东西都是键值对。
注意:快速创建字典是编译器特性。
(二)NSMutableDictionary可变字典
1 // 2 // main.m 3 // 06-NSDictionary 4 // 5 // Created by apple on 13-8-12. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 10 /* 11 集合 12 1.NSArray\NSMutableArray 13 * 有序 14 * 快速创建(不可变):@[obj1, obj2, obj3] 15 * 快速访问元素:数组名[i] 16 17 2.NSSet\NSMutableSet 18 * 无序 19 20 3.NSDictionary\NSMutableDictionary 21 * 无序 22 * 快速创建(不可变):@{key1 : value1, key2 : value2} 23 * 快速访问元素:字典名[key] 24 */ 25 26 #import <Foundation/Foundation.h> 27 28 int main() 29 { 30 NSArray *persons = @[ 31 @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]}, 32 @{@"name" : @"rose", @"qq" : @"767567"}, 33 @{@"name" : @"jim", @"qq" : @"423423"}, 34 @{@"name" : @"jake", @"qq" : @"123123213"} 35 ]; 36 37 // 38 // NSDictionary *jim = persons[2]; 39 40 41 // 42 NSString *bookName = persons[0][@"books"][1]; 43 NSLog(@"%@", bookName); 44 //NSArray *array = persons[0][@"books"]; 45 46 //NSLog(@"%@", array); 47 48 // 先取出1位置对应的字典 49 // 再取出字典中qq这个key对应的数据 50 //NSLog(@"%@", persons[1][@"qq"]); 51 52 // NSLog(@"%@", jim); 53 return 0; 54 } 55 56 void use4() 57 { 58 // 字典不允许有相同的key,但允许有相同的value(Object) 59 // 字典的无序的 60 NSDictionary *dict = @{ 61 @"address" : @"北京", 62 @"name" : @"jack", 63 @"name2" : @"jack", 64 @"name3" : @"jack", 65 @"qq" : @"7657567765"}; 66 67 // NSArray *keys = [dict allKeys]; 68 // 69 // for (int i = 0; i<dict.count; i++) 70 // { 71 // NSString *key = keys[i]; 72 // NSString *object = dict[key]; 73 // 74 // 75 // NSLog(@"%@ = %@", key, object); 76 // } 77 78 79 [dict enumerateKeysAndObjectsUsingBlock: 80 ^(id key, id obj, BOOL *stop) { 81 NSLog(@"%@ - %@", key, obj); 82 83 // *stop = YES; 84 }]; 85 } 86 87 void use3() 88 { 89 NSMutableDictionary *dict = @{@"name" : @"jack"}; 90 91 92 [dict setObject:@"rose" forKey:@"name"]; 93 } 94 95 void use2() 96 { 97 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 98 99 // 添加键值对100 [dict setObject:@"jack" forKey:@"name"];101 102 103 [dict setObject:@"北京" forKey:@"address"];104 105 [dict setObject:@"rose" forKey:@"name"];106 107 108 // 移除键值对109 // [dict removeObjectForKey:<#(id)#>];110 111 112 NSString *str = dict[@"name"];113 114 115 //NSLog(@"%@", str);116 117 NSLog(@"%@", dict);118 119 120 //NSLog(@"%@", @[@"jack", @"rose"]);121 }122 123 void use()124 {125 /*126 字典:127 128 key > 文字内容130 131 里面存储的东西都是键值对132 133 134 */135 136 // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];137 138 139 // NSArray *keys = @[@"name", @"address"];140 // NSArray *objects = @[@"jack", @"北京"];141 142 // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];143 144 145 /*146 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:147 @"jack", @"name",148 @"北京", @"address",149 @"32423434", @"qq", nil];*/150 151 152 NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};153 154 // id obj = [dict objectForKey:@"name"];155 156 id obj = dict[@"name"];157 158 NSLog(@"%@", obj);159 160 161 162 // 返回的是键值对的个数163 NSLog(@"%ld", dict.count);164 }
1 // 2 // main.m 3 // Foundation9-NSDictionary 4 // 5 // Created by mj on 13-4-7. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import "Student.h" 11 12 #pragma mark 字典的初始化 13 void dictCreate() { 14 // NSDictionary是不可变的 15 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"]; 16 17 // 最常用的初始化方式 18 dict = [NSDictionary dictionaryWithObjectsAndKeys: 19 @"v1", @"k1", 20 @"v2", @"k2", 21 @"v3", @"k3", nil]; 22 23 NSArray *objects = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil]; 24 NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil]; 25 dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 26 NSLog(@"%@", dict); 27 } 28 29 #pragma mark 字典的基本用法 30 void dictUse() { 31 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 32 @"v1", @"k1", 33 @"v2", @"k2", 34 @"v3", @"k3", nil]; 35 36 // count是计算有多少个键值对(key-value) 37 NSLog(@"count=%zi", dict.count); 38 39 // 由于NSDictionary是不可变的,所以只能取值,而不能修改值 40 id obj = [dict objectForKey:@"k2"]; 41 NSLog(@"obj=%@", obj); 42 43 // 将字典写入文件中 44 NSString *path = @"/Users/apple/Desktop/dict.xml"; 45 [dict writeToFile:path atomically:YES]; 46 47 // 从文件中读取内容 48 dict = [NSDictionary dictionaryWithContentsOfFile:path]; 49 NSLog(@"dict=%@", dict); 50 } 51 52 #pragma mark 字典的用法 53 void dictUse2() { 54 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 55 @"v1", @"k1", 56 @"v2", @"k2", 57 @"v3", @"k3", nil]; 58 // 返回所有的key 59 NSArray *keys = [dict allKeys]; 60 //NSLog(@"keys=%@", keys); 61 62 NSArray *objects = [dict allValues]; 63 //NSLog(@"objects=%@", objects); 64 65 // 根据多个key取出对应的多个value 66 // 当key找不到对应的value时,用marker参数值代替 67 objects = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil] notFoundMarker:@"not-found"]; 68 NSLog(@"objects=%@", objects); 69 } 70 71 #pragma mark 遍历字典 72 void dictFor() { 73 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 74 @"v1", @"k1", 75 @"v2", @"k2", 76 @"v3", @"k3", nil]; 77 // 遍历字典的所有key 78 for (id key in dict) { 79 id value =http://www.mamicode.com/ [dict objectForKey:key]; 80 NSLog(@"%@=%@", key, value); 81 } 82 } 83 84 #pragma mark 遍历字典2 85 void dictFor2() { 86 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 87 @"v1", @"k1", 88 @"v2", @"k2", 89 @"v3", @"k3", nil]; 90 // key迭代器 91 NSEnumerator *enumer = [dict keyEnumerator]; 92 id key = nil; 93 while ( key = [enumer nextObject]) { 94 id value =http://www.mamicode.com/ [dict objectForKey:key]; 95 NSLog(@"%@=%@", key, value); 96 } 97 98 // 对象迭代器 99 // [dict objectEnumerator];100 }101 102 #pragma mark 遍历字典3103 void dictFor3() {104 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:105 @"v1", @"k1",106 @"v2", @"k2",107 @"v3", @"k3", nil];108 [dict enumerateKeysAndObjectsUsingBlock:109 ^(id key, id obj, BOOL *stop) {110 NSLog(@"%@=%@", key, obj);111 }];112 }113 114 #pragma mark 115 void dictMemory() {116 Student *stu1 = [Student studentWithName:@"stu1"];117 Student *stu2 = [Student studentWithName:@"stu2"];118 Student *stu3 = [Student studentWithName:@"stu3"];119 120 // 一个对象称为字典的key或者value时,会做一次retain操作,也就是计数器会+1121 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:122 stu1, @"k1",123 stu2, @"k2",124 stu3, @"k3", nil];125 126 // 当字典被销毁时,里面的所有key和value都会做一次release操作,也就是计数器会-1127 }128 129 int main(int argc, const char * argv[])130 {131 @autoreleasepool {132 dictMemory();133 }134 return 0;135 }
4、NSNumber
//// main.m// Foundation11-NSNumber//// Created by mj on 13-4-7.// Copyright (c) 2013年 itcast. All rights reserved.//#import <Foundation/Foundation.h>void number() { // 将int类型的10 包装成 一个NSNumber对象 NSNumber *number = [NSNumber numberWithInt:10]; NSLog(@"number=%@", number); NSMutableArray *array = [NSMutableArray array]; // 添加数值到数组中 [array addObject:number]; // 取出来还是一个NSNumber对象,不支持自动解包(也就是不会自动转化为int类型) NSNumber *number1 = [array lastObject]; // 将NSNumber转化成int类型 int num = [number1 intValue]; NSLog(@"num=%i", num);}int main(int argc, const char * argv[]){ @autoreleasepool { number(); } return 0;}
1 // 2 // main.m 3 // 07-NSNumber 4 // 5 // Created by apple on 13-8-12. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 int main()12 {13 // @20 将 20包装成一个NSNumber对像14 15 16 NSArray *array = @[17 18 @{@"name" : @"jack", @"age" : @20},19 20 @{@"name" : @"rose", @"age" : @25},21 22 @{@"name" : @"jim", @"age" : @27}23 ];24 25 26 // 将各种基本数据类型包装成NSNumber对象27 @10.5;28 @YES;29 @‘A‘; // NSNumber对象30 31 @"A"; // NSString对象32 33 34 35 // 将age变量包装成NSNumber对象36 int age = 100;37 @(age);38 //[NSNumber numberWithInt:age];39 40 41 NSNumber *n = [NSNumber numberWithDouble:10.5];42 43 44 int d = [n doubleValue];45 46 47 48 int a = 20;49 50 // @"20"51 NSString *str = [NSString stringWithFormat:@"%d", a];52 NSLog(@"%d", [str intValue]);53 54 return 0;55 }56 57 void test()58 {59 NSNumber *num = [NSNumber numberWithInt:10];60 61 NSDictionary *dict = @{62 @"name" : @"jack",63 64 65 @"age" : num66 67 };68 69 NSNumber *num2 = dict[@"age"];70 71 72 int a = [num2 intValue];73 74 NSLog(@"%d" , a);75 }
5、NSDate
1 // 2 // main.m 3 // Foundation14-NSDate 4 // 5 // Created by mj on 13-4-7. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 #pragma mark 日期创建12 void dateCreate() {13 // date方法返回的就是当前时间(now)14 NSDate *date = [NSDate date];15 16 // now: 11:12:4017 // date: 11:12:5018 date = [NSDate dateWithTimeIntervalSinceNow:10];19 20 // 从1970-1-1 00:00:00开始21 date = [NSDate dateWithTimeIntervalSince1970:10];22 23 // 随机返回一个比较遥远的未来时间24 date = [NSDate distantFuture];25 26 // 随机返回一个比较遥远的过去时间27 date = [NSDate distantPast];28 NSLog(@"%@", date);29 }30 31 void dateUse() {32 NSDate *date = [NSDate date];33 // 返回1970-1-1开始走过的毫秒数34 NSTimeInterval interval = [date timeIntervalSince1970];35 36 // 跟其他时间进行对比37 // [date timeIntervalSinceDate:<#(NSDate *)#>];38 NSDate *date2 = [NSDate date];39 // 返回比较早的那个时间40 [date earlierDate:date2];41 // 返回比较晚的那个时间42 [date laterDate:date2];43 }44 45 void dateFormat() {46 NSDate *date = [NSDate date];47 48 // 2013-04-07 11:14:4549 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];50 // HH是24进制,hh是12进制51 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";52 53 // formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] autorelease];54 55 NSString *string = [formatter stringFromDate:date];56 NSLog(@"%@", string);57 58 // 返回的格林治时间59 NSDate *date2 = [formatter dateFromString:@"2010-09-09 13:14:56"];60 61 NSLog(@"%@", date2);62 63 [formatter release];64 }65 66 int main(int argc, const char * argv[])67 {68 69 @autoreleasepool {70 dateFormat();71 }72 return 0;73 }
1 // 2 // main.m 3 // 08-NSDate 4 // 5 // Created by apple on 13-8-12. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 int main()12 {13 // 09/10/201114 NSString *time = @"2011/09/10 18:56";15 16 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];17 formatter.dateFormat = @"yyyy/MM/dd HH:mm";18 19 NSDate *date = [formatter dateFromString:time];20 NSLog(@"%@", date);21 return 0;22 }23 24 25 void date2string()26 {27 NSDate *date = [NSDate date];28 29 30 // 日期格式化类31 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];32 33 // y 年 M 月 d 日34 // m 分 s 秒 H (24)时 h(12)时35 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";36 37 NSString *str = [formatter stringFromDate:date];38 39 NSLog(@"%@", str);40 }41 42 void use()43 {44 // 创建一个时间对象45 NSDate *date = [NSDate date];46 // 打印出的时候是0时区的时间(北京-东8区)47 NSLog(@"%@", date);48 49 NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];50 51 52 // 从1970开始走过的秒数53 NSTimeInterval seconds = [date2 timeIntervalSince1970];54 55 // [date2 timeIntervalSinceNow];56 }
6、NSValue
1 // 2 // main.m 3 // 08-NSValue 4 // 5 // Created by apple on 13-8-12. 6 // Copyright (c) 2013年 itcast. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 12 // NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue13 14 int main()15 {16 17 // 结构体--->OC对象18 19 CGPoint p = CGPointMake(10, 10);20 // 将结构体转为Value对象21 NSValue *value =http://www.mamicode.com/ [NSValue valueWithPoint:p];22 23 // 将value转为对应的结构体24 // [value pointValue];25 26 NSArray *array = @[value ];27 28 29 // insert code here...30 // NSLog(@"这是哥修改过的东西6");31 return 0;32 }
黑马程序员——Foundation框架的小总结