一、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 ----> value
129 索引 ----> 文字内容
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 = [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 = [dict objectForKey:key];
95 NSLog(@"%@=%@", key, value);
96 }
97
98 // 对象迭代器
99 // [dict objectEnumerator];
100 }
101
102 #pragma mark 遍历字典3
103 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操作,也就是计数器会+1
121 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
122 stu1, @"k1",
123 stu2, @"k2",
124 stu3, @"k3", nil];
125
126 // 当字典被销毁时,里面的所有key和value都会做一次release操作,也就是计数器会-1
127 }
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" : num
66
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:40
17 // date: 11:12:50
18 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:45
49 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/2011
14 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之所以能包装基本数据类型为对象,是因为继承了NSValue
13
14 int main()
15 {
16
17 // 结构体--->OC对象
18
19 CGPoint p = CGPointMake(10, 10);
20 // 将结构体转为Value对象
21 NSValue *value = [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 }