首页 > 代码库 > 黑马程序员——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框架的小总结