Foundation 入门

Foundation(基础框架) 课程知识比较多,所以后面会每个学习内容新建一个类去写。
foundation

新建一个项目, 文章源码,找不到则到finish里面找

String

新建一个String

String.h
1
2
3
4
5
#import <Foundation/Foundation.h>

@interface String : NSObject
-(void) stringBaseFn; // 声明一个函数,后面有关的字符串函数知识都写在该方法内
@end

main.m
1
2
3
4
5
6
7
8
9
10
11
12
// 引入并调用该方法,主要是一些字符串的方法 以及输出
#import <Foundation/Foundation.h>
#import "String.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
String *str = [[String alloc] init];
[str stringBaseFn];

}
return 0;
}
String.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//
// String.m
// foundation
//
// Created by Jsonz on 2017/4/23.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "String.h"

@implementation String
-(void) stringBaseFn
{
char *s = "Hello C"; // c语言字符串 char 类型 *号代表对象
// OC 中@代表对象
NSString *str = @"Hello ObjectiveC"; // OC 字符串 NSString 类型 *号代表对象
// OC 与 C字符串的类型转换
// C -> OC
NSString *str1 = [NSString stringWithUTF8String:s];
NSLog(@"str1 = %@", str1);
// OC -> C
NSLog(@"str2 = %s", [str UTF8String]);

// 这样创建字符串,不需要自己手动去释放内存等
NSString *str3 = @"IOS";
// 这种需要手动释放内存
NSString *str4 = [[NSString alloc] init];
str4 = @"ios";

// **格式化字符串** 重要
int a = 10;
NSString *str5 = [NSString stringWithFormat:@"a = %d str3 = %@", a, str3];
NSLog(@"str5 为 %@", str5);

// 拼接字符串
NSString *str6 = [str5 stringByAppendingString: [NSString stringWithUTF8String: s]];
NSLog(@"str6 = %@", str6);

// 大小写的转换问题
NSString *str7 = @"HELLO JSONZ";
NSString *str8 = [str7 lowercaseString];
NSLog(@"str8 = %@", str8);

// 转换大写
NSString *str9 = [str8 uppercaseString];
NSLog(@"str9 = %@", str9);

// 前缀和后缀的判断
NSString *str10 = @"www.imooc.com";
// 判断前缀
BOOL hasPreFix = [str10 hasPrefix:@"www."];
if (hasPreFix)
NSLog(@"有对应前缀");
else
NSLog(@"没有对应前缀");

// 后缀
BOOL hasSuffix = [str10 hasSuffix:@".com"];
if (hasSuffix)
NSLog(@"有对应后缀");
else
NSLog(@"没有对应后缀");

// 判断字符串是否相同
NSString *str11 = @"Hello";
NSString *str12 = @"Hello";
if ([str11 isEqualToString:str12])
NSLog(@"str11 与 str12 一致");
else
NSLog(@"不一致");

// 分割字符串
// 1. 按照指定字符分割字符串 返回数组
NSString *str13 = @"a,b,c,d,e,f,g";
NSArray *strArray = [str13 componentsSeparatedByString:@","];
for (NSString *str in strArray)
{
NSLog(@"str = %@", str);
}
// 2. 按照范围截取字符串
NSRange range = NSMakeRange(1, 5);
NSString *str14 = [str13 substringWithRange:range];
NSLog(@"str14 = %@", str14);
// 3. 从某一位开始截取到结束
NSString *str15 = [str13 substringFromIndex:2];
NSLog(@"str15 = %@", str15);
// 4.从开头到某一位
NSString *str16 = [str13 substringToIndex:7];
NSLog(@"str16 = %@", str16);
// 5.将字符串拆分为每一个字符, 从字符串取出某一位
for (int i = 0; i < [str13 length]; i++)
{
NSLog(@"%c", [str13 characterAtIndex:i]);
}

// 查找
NSString *str17 = @"ab cd ef gh ij ab";
// 查找指定字符串的位置 正向查找
NSRange range1 = [str17 rangeOfString:@"ab"];
NSLog(@"range1.location: %ld range1.length: %ld", range1.location, range1.length);

// 替换
NSString *str18 = @"Hello ios, Hello imooc";
// 替换某一个范围的内容
NSString *str19 = [str18 stringByReplacingCharactersInRange:NSMakeRange(0, 5) withString:@"你好"];
NSLog(@"str19 = %@", str19);

// 用指定字符串替换原字符串
NSString *str20 = [str18 stringByReplacingOccurrencesOfString:@"Hello ios" withString: @"第一个参数为源字符串中要被替换的内容, 第二个为替换成的字符串"];
NSLog(@"str20 = %@", str20);

// 读取文件
// 1. 本地文件; 2.网络文件
// 路径类
NSString *str21 = @"www.baidu.com";
// 网络路径
NSURL *httpURL = [NSURL URLWithString:str21];
//本地路径
// NSString *fileURL = [NSURL fileURLWithPath:str21];
// 读取网络文件
NSString *httpStr = [NSString stringWithContentsOfURL:httpURL encoding:NSUTF8StringEncoding error:nil];
NSLog(@"httpStr = %@", httpStr);
// 读取本地文件
NSString *fileStr = [NSString stringWithContentsOfFile: @"/Users/jsonz/Documents/learn/Objective-c/foundation/foundation/app.txt" encoding:NSUTF8StringEncoding error: nil];
NSLog(@"fileStr = %@", fileStr);
// 写入文件
NSString *str22 = @"Hello JSer";
BOOL isOk = [str22 writeToFile:@"/Users/jsonz/Documents/learn/Objective-c/foundation/foundation/app.js" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (isOk) NSLog(@"文件写入成功");
else NSLog(@"文件写入失败");
}
@end

NSMutableString 可变字符串

新建一个 NSMutableStringClass 类。 NSMutableString是字符串的子类

NSMutableString.h
1
2
3
4
5
6
7
8
9
10
11
12
13
//
// NSStringClass.h
// foundation
//
// Created by Jsonz on 2017/4/25.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSMutableStringClass : NSObject
-(void) ShowNSMutableString;
@end
NSMutableString.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//
// NSStringClass.m
// foundation
//
// Created by Jsonz on 2017/4/25.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "NSMutableStringClass.h"

@implementation NSMutableStringClass
-(void) ShowNSMutableString
{
// 可变字符串的简单方法
// 可变字符串是字符串的子类
// 实例化
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10]; // 分类长度不可以超过10, 性能优化。不过超过10 也不会报错
[str setString:@"hello "];

// 1.追加字符串
[str appendString:@"ObjectiveC"];
NSLog(@"str = %@", str);
// 追加格式化字符串
int a = 10;
[str appendFormat:@" - %d", a];
NSLog(@"str = %@", str);

// 2.替换字符串
NSRange range = [str rangeOfString:@"ObjectiveC"];
[str replaceCharactersInRange:range withString:@"IOS"];
NSLog(@"str = %@", str);

// 3. 插入字符串
[str insertString:@"A" atIndex: 4];
NSLog(@"str = %@", str);

// 4. 删除字符串
NSRange range1 = [str rangeOfString:@"IOS"];
[str deleteCharactersInRange:range1];
NSLog(@"str = %@", str);
}
@end
main.m 调用前记得引入类
1
2
NSMutableStringClass *_NSMutableString = [[NSMutableStringClass alloc] init];
[_NSMutableString ShowNSMutableString];

NSArray 不可变数组

新建一个arr

Arr.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//
// Arr.m
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "Arr.h"

@implementation Arr
-(void) showArrFn
{
NSLog(@"不可变数组");
// OC数组。 可以存储不同类型对象,只能存储对象.(int, char)不可以
// 只存对象指针(js一样)
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
// 数组长度
int count = (int)arr1.count;
NSLog(@"count = %d", count);

// 判断是否有该对象
BOOL isHave = [arr1 containsObject: @"2"];
if (isHave)
NSLog(@"存在");
else
NSLog(@"不存在");

// 取得数组中所需元素
NSString *str = [arr1 lastObject];
NSLog(@"最后一个对象为 %@", str);
str = [arr1 firstObject];
NSLog(@"第一个对象为 %@", str);
str = [arr1 objectAtIndex: 3];
NSLog(@"第三个元素为 %@", str);
// 查找某个对象为第几个下标, 不存在则 -1
int index = (int)[arr1 indexOfObject:@"3"];
NSLog(@"查找某个对象为第几个下标 %d", index);

// 数组的遍历 1.for; 2. for in; 3.枚举迭代
// for 循环 注意类型问题
for (int i = 0; i < arr1.count; i++) {
NSString *str1 = [arr1 objectAtIndex:i];
NSLog(@"for str1 = %@", str1);
}

// 快速枚举 数组的元素类型要保持一致
for (NSString *str2 in arr1) {
NSLog(@"for in str2 = %@", str2);
}

// 迭代枚举(慕课没有该点视频)
[arr1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"id= %@", obj);
}];
}
@end

NSMutableArr 可变数组

与可变字符串一样,数组也有可变的。一般项目中如果有修改数组的就用这个,如果不希望数组被修改则用不可变数组

NSMutableArrClass.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//
// NSMutableArrClass.m
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "NSMutableArrClass.h"

@implementation NSMutableArrClass
-(void)showArrFn
{
NSMutableArray *array = [[NSMutableArray alloc] init];
NSString *str1 = @"bili";
// 添加元素
[array addObject: str1];
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
[array addObject:arr1];
NSLog(@"array = %@", array);

// 删除所有元素
[array removeAllObjects];
NSLog(@"删除后的 array = %@", array);
[array addObject:arr1];
[array addObject: str1];
// 删除最后一个元素
[array removeLastObject];
NSLog(@"删除后的 array = %@", array);
[array addObject: str1];
// 删除指定元素
[array removeObject:@"bili"];
NSLog(@"删除后的 array = %@", array);
// 删除指定index的元素
[array removeObjectAtIndex:0];
NSLog(@"删除后的 array = %@", array);

[array addObject:arr1];
[array addObject: str1];

// 交换元素位置
[array exchangeObjectAtIndex:1 withObjectAtIndex:0];
NSLog(@"交换后 %@", array);
}
@end

字典 NSDictionary

相当于js 里的对象{}. 新建一个类NSDic

NSDictionary.h
1
2
3
4
5
6
7
8
9
10
11
12
13
//
// NSDictionary.h
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDic : NSObject
-(void) showNSDictionaryFn;
@end
NSDictionary.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
// NSDictionary.m
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "NSDic.h"

@implementation NSDic
-(void) showNSDictionaryFn
{
NSLog(@"test");
// 字典: 相当于js的对象~ py的字典。
// 声明后不可以改
NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"a"];
NSLog(@"dict1 = %@", dict1);

// 多个键值对
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", @"3", nil] forKeys:[NSArray arrayWithObjects:@"a", @"b", @"c", nil]];
NSLog(@"dict2 %@", dict2);

// 简便写法
NSDictionary *dict3 = @{
@"1": @"a",
@"2": @"b"
};
NSLog(@"dict3 %@", dict3);

// 长度
int count = (int)[dict2 count];
NSLog(@"count %d", count);

// 获取对应key的 value
NSString *value = [dict2 valueForKey: @"b"];
NSLog(@"value = %@", value);
NSString *value2 = [dict2 objectForKey: @"b"];
NSLog(@"value2 = %@", value2);

// 数组 字典所有的值
NSArray *allValues = [dict2 allValues];
NSLog(@"allValues = %@", allValues);

// 数组 所有的key
NSArray *allKeys = [dict2 allKeys];
NSLog(@"allKeys = %@", allKeys);

// 遍历
NSArray *array = [dict2 objectsForKeys:[NSArray arrayWithObjects: @"a", @"b", @"d", nil] notFoundMarker:@"Not Fount"];
NSLog(@"array = %@", array);

// 遍历字典
for (NSString *key in dict2) {
NSLog(@"%@ = %@", key, [dict2 objectForKey:key]);
}

// 枚举器
NSEnumerator *en = [dict2 keyEnumerator];
id key = nil;
while (key = [en nextObject]) {
NSLog(@"key = %@", key);
}

[dict2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"id = %@, obj = %@", key, obj);
}];

}
@end

可变字段 NSMutableDictionary

NSDic2.h
1
2
3
4
5
6
7
8
9
10
11
12
13
//
// NSDic2.h
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDic2 : NSObject
-(void) showFn;
@end
NSDic2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//
// NSDic2.m
// foundation
//
// Created by Jsonz on 2017/4/26.
// Copyright © 2017年 Jsonz. All rights reserved.
//

#import "NSDic2.h"

@implementation NSDic2
// 可变字典
-(void) showFn
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
// 添加键值对
[dict setObject:@"1" forKey: @"a"];
[dict setObject: @"2" forKey: @"b"];

// 删除键值对
[dict removeObjectForKey:@"a"];
NSLog(@"dict 删除forKey %@", dict);

// 删除所有
[dict removeAllObjects];
NSLog(@"dict 删除所有 %@", dict);

[dict setObject:@"1" forKey: @"a"];
[dict setObject: @"2" forKey: @"b"];
[dict setObject: @"3" forKey: @"c"];
[dict removeObjectsForKeys: [NSArray arrayWithObjects:@"a", @"b", nil]];
NSLog(@"dict 批量删除 %@", dict);

}
@end