------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. Foundation框架简介:
1) 框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架
2) Foundation框架的作用
是Mac/iOS中其他框架的基础;
包含了很多开发中常用的数据类型。
3) 使用foundation框架
只要引入头文件即可#import<Foundation/Foundation.h>
4) 如果不小心修改了系统的文件,会引起错误
删除xcode的缓存就可以还原,缓存路径为:
/Users/用户名/Library/Developer/Xcode/DeriveDate(默认为隐藏文件)
显示隐藏文件,在终端使用以下命令,重启finder即可。
显示隐藏文件:defaultswrite com.apple.finder AppleShowAllFiles –bool true
隐藏隐藏文件:defaultswrite com.apple.finder AppleShowAllFiles –bool false
2. NSString介绍
1) 一个NSString对象就代表一个字符串(文字内容),一般称NSString为字符串类。
2) stringWithFormat方法初始化的字符串在堆区。
NSString *str = [NSStringstringWithFormat:@”abc”];
3) writeToFile方法,用来写入文件
NSString *str2 = @”abcdef”;
NSError *err;
//四个参数分别为:文件路径;是否原子性;编码方式;错误存储
[str2 writeToFile:@”/Users/Mac/Desktop/str.txt” atomically:YES encoding:NSUTF8StringEncoding error:&err];
4) stringWithContentsOfFile方法用来读取文件内容,对字符串进行初始化。
NSError *err;
NSString *str3 = [NSStringstringWithContentsOfFile:@”文件路径” encoding:NSUTF8StringEncoding error:&err];
3. NSURL读取字符串
1) NSURL简介
① URL全称为Uniform Resource Locator(统一资源定位符)
URL是互联网上标准资源的地址
互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置
根据一个URL就能找到唯一的一个资源。
② URL格式
基本URL包含协议、主机域名(服务器名称\IP地址)、路径
http://ios.itcast.cn/ios/images/content25.jpg
可以简单认为:URL=协议头://主机域名/路径
③ 常见URL协议头
a. http\https:超文本传输协议资源,网络资源。https://标明是使用SSL加密的
http的连接很简单,是无状态的,端口为80
https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,端口是443.
b. ftp:文件传输协议
2) NSURL读取字符串
① 使用URLWithString
a. 构建本地路径的URL
NSString *str = @”abcde”;
NSURL *url = [NSURL URLString:@”file:///Users/Mac/Desktop/a.txt”];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncodingerror:nil];
b. 可以构建路径,调用手机系统的程序
NSURL *url = [NSURL URLWithString:@”tel://10086”];
//使用此url可以打电话
NSURL *url = [NSURL URLWithString:@”sms://10086”];
//使用此url可以发短信
② 使用fileURLWithPath 获取本地文件路径
NSURL *url = [NSURL fileURLWithPath:@” /Users/Mac/Desktop/b.txt”];
3) 从文件获取内容初始化字符串
使用stringWithContentsOfURL
NSURL *url = [NSURL URLString:@”file:///Users/Mac/Desktop/a.txt”];
NSString *str = [NSStringstringWithContentsOfURL:url encoding:NSUTF8StringEndoding error:nil];
4. NSString字符串比较
1) 比较字符串大小
使用compare方法,返回结果为NSComparisonResult类型,为枚举类型,有NSOrderedAscending(-1), NSOrderedSame(0), NSOrderedDescending(1)
NSString *str1 = @”abc”;
NSString *str2 = @”Abc”;
NSComparisonResult result = [str1compare:str2];
默认区分大小写,所以结果为1
2) 加条件进行比较
使用compare: options:条件 方法
常用的条件有三个:
NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch:进行完全比较,区分大小写(默认)
NSNumericSearch:比较字符串的字符个数,而不是字符值。
NSString *str1 = @”abc”;
NSString *str2 = @”Abc”;
NSComparisonResult result = [str1compare:str2 options: NSCaseInsensitiveSearch|NSNumericSearch];
不区分大小写来比较str1和str2的字符个数,结果为0.
有多个条件时,使用|进行分隔。
3) “==”不能判断字符串是否相等,判断的是地址。
可以使用isEqualToString来判断内容是否相等,区分大小写。
NSString *str1 = @”abc”; //常量区
NSString *str2 = @”abc”; //常量区
NSString *str3 = [NSStringstringWithFormat:@”abc”]; //堆区
str1==str2 //1
str1==str3 //0
[str1 isEqualToString:str2]; //1
[str1 isEqualToString:str3]; //1
5. NSString前后缀检查
1) 检测前缀
方法为:hasPrefix
[str hasPrefix:@”待检测内容”];判断str是否以“待检测内容”为前缀,返回值为BOOL类型
2) 检测后缀
方法为hasSuffix
[str hasSuffix:@”指定字符串”];判断str是否以“指定字符串”为后缀,返回值同样为BOOL类型。
6. 字符串搜索
搜索字符串str2在字符串str1中首次出现的位置
方法为:rangeOfString 返回值为NSRange类型,为结构体类型,
Typedef struct{
NSUInteger location;
NSUInteger length;
}NSRange;
NSRange range = [str1 rangOfString:str2];
搜索str2在str1中首次出现的位置,返回值得到range.location和range.length
1) 如果查找到,则range.location为str2在str1中首次出现的位置,range.length为str2的长度
2) 如果查找不到,range.location的值为NSNotFound(最大的long类型的值),range.length的值为0
7. 字符串的截取和替换
//1.字符串的截取
//1)从某位置开始(包括这个位置),截取到最后
NSString *str =@"abcdefgh";
NSString *subStr =[str substringFromIndex:5];
NSLog(@"subStr =%@",subStr);//subStr = fgh
//2)从头开始,截取到某个位置(不包括这个位置)
subStr = [strsubstringToIndex:5];
NSLog(@"subStr =%@",subStr);//subStr = abcde
//3)从某个位置开始(包括这个位置),截取指定长度的字符串
//注意:使用NSRange截取的范围不可超出字符串,越界访问会报错
NSRange range = {3,5};
subStr = [strsubstringWithRange:range];
NSLog(@"subStr =%@",subStr);//subStr = defgh<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
//2.字符串的替换
//把字符串中的原有部分内容替换为指定内容。
//stringByReplacingOccurrencesOfString:旧内容 withString:新内容
NSString *oldStr =@"abcde abcde abc abc";
NSString *newStr=[oldStr stringByReplacingOccurrencesOfString:@" "withString:@""];
NSLog(@"newStr =%@",newStr);
//去掉空格newStr = abcdeabcdeabcabc
newStr = [newStrstringByReplacingOccurrencesOfString:@"a" withString:@"#"];
NSLog(@"newStr =%@",newStr);
//把newStr的a换成#:newStr = #bcde#bcde#bc#bc
8. NSRange
1) NSRange是Foundation框架中比较常用的结构体,其定义为
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSUInteger的定义为:
typedef unsigned long NSUInteger;
NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围。
NSRange有2个成员:
NSUInteger location:表示该范围的其实位置
NSUInteger length:表示该范围内的长度
2) NSRange的初始化方式
//1)通过结构体变量访问成员
NSRange r;
r.location = 3;
r.length = 3;
//2)结构体变量整体赋值
NSRange r2;
r2 = (NSRange){4,2};
NSRange r3 = {2,4};
//3)部分赋值
NSRange r4 = {.location = 5};
//4)OC新增初始化方法
//NSMakeRange方法,给NSRange结构体变量整体赋值。
NSRange r5 = NSMakeRange(4, 4);
//将结构体变量转换为字符串NSStringFromRange(结构体变量名)
NSLog(@"r5 = %@",NSStringFromRange(r5));
//r5 = {4, 4}
9. NSString的其他用法
1) 获取字符串的长度,使用-(NSUInteger)length方法
2) 获取字符串的每个字符-(unichar)characterAtIndex:(NSUInteger)index;
3) 字符串转换为其他类型
① -(double)doubleValue;字符串转化为double类型
② -(float)floatValue;字符串转化为float类型
③ -(int)intValue;字符串转化为int类型
4) C和OC字符串的互相转换问题
① C---->OC
char *s = “abcde”;
//用C字符串来初始化OC字符串
NSString *str = [NSStringstringWithUTF8String:s];
② OC--->C
NSString *str2 = @”aaaaaa”;
//把OC字符串转化为C字符串
char *s = [str2 UTF8String];
5) 去掉字符串收尾的空格
去掉字符串的所有空格
[strstringByReplacingOccurrencesOfString:@” ” withString:@””]
去掉首尾空格
[strstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
10. NSMutableString的使用
1) NSMutableString类继承NSString类,但NSString是不可变的,里面的文字内容不能进行修改。而NSMutableString是可变的,厘米男的文字内容可以随时修改。
2) 不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化。
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改。
3) NSMutableString定义的字符串存储在堆区。
4) 常用方法
//创建一个空的字符串
NSMutableString *str = [NSMutableStringstring];
//格式化添加字符串
[str appendFormat:@"abcdefghijk"];
NSLog(@"str = %@",str);//str = abcdefghijk
//删除字符串的一部分
[str deleteCharactersInRange:NSMakeRange(3, 3)];
NSLog(@"str = %@",str); //str = abcghijk
//字符串中插入内容
[str insertString:@"def" atIndex:3];
NSLog(@"str = %@",str);//str = abcdefghijk
//替换字符串的部分内容
[strreplaceCharactersInRange:NSMakeRange(3, 3) withString:@"*****"];
NSLog(@"str = %@",str);//str= abc*****ghijk
5) NSMutableString使用注意
① @””只能给NSString赋值,不能给NSMutableString赋值,运行时会报错
② NSMutableString的string属性可以修改字符串的内容
str.string = @”abc”; 会把str修改为“abc”.
③ 开发中绝大多数用到的是NSString,只是在需要对字符串进行特殊处理的时候才使用NSMutableString。
④ 位枚举
如果方法的参数中有位枚举变量,但是不想使用位枚举,可以把位枚举的值设为0,这样位枚举就不起作用。
11. NSArray
1) 基本使用和注意事项
// + (instancetype)array;创建一个空数组
NSArray *arr = [NSArray array];
NSLog(@"arr = %@",arr);
// + (instancetype)arrayWithObject:(ObjectType)anObject;
//创建一个数组,有一个元素
NSArray *arr2 = [NSArray arrayWithObject:@"abc"];
NSLog(@"arr2 = %@",arr2);
// + (instancetype)arrayWithObjects(ObjectType)firstObj, ...
//创建一个数组,有多个元素,元素类型可以不一致
//nil表示数组初始化元素结束
NSArray *arr3 = [NSArray arrayWithObjects:@"a",@1, nil];
NSLog(@"arr3 = %@",arr3);
// + (instancetype)arrayWithArray:(NSArray *)array;
NSArray *arr4 = [NSArrayarrayWithArray:arr3];
NSLog(@"arr4 = %@",arr4);
// - (instancetype)initWithObjects:(ObjectType)firstObj, ...
//调用对象方法初始化
NSArray *arr5 = [[NSArrayalloc]initWithObjects:@"a",@"b",nil];
NSLog(@"arr5 = %@",arr5);
//使用注意
//1)不能给NSArray赋值为nil,它表示数组元素结束,可以使用[NSNull null]进行赋值
NSArray *arr6 = [NSArray arrayWithObjects:@"a",[NSNull null],nil];
NSLog(@"arr6 = %@",arr6);
//2)使用时不要用第一种方法进行赋值,只是创建一个空数组,不能改变,没有意义.
2) NSArray的常见用法
NSArray *arr = [NSArrayarrayWithObjects:@"a",@"1",@2,@"bbb", nil];
//1)获取数组的长度,用count属性获取数组元素的个数
NSLog(@"arr.count = %ld",arr.count);
//2)根据下标,获取对应的对象
NSLog(@"%@",[arr objectAtIndex:3]);
//3)返回某个元素的下标
NSUInteger loc;
loc = [arr indexOfObject:@"1"];
NSLog(@"%ld",loc);
//4)检查数组是否包含某元素
if([arr containsObject:@2]){
NSLog(@"包含");
}else{
NSLog(@"不包含");
}
简化方式,定义和访问数组元素
//1)定义数组,使用@[]方式
NSArray *arr =@[@"aaa",@"bbb",@3,@"four"];
NSLog(@"%@",arr);
//2)访问数组,使用下标
NSLog(@"%@",arr[2]);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
3) NSArray的遍历
NSArray *arr = @[@"one",@"two",@"three",@"four"];
//1)普通方式,通过下标访问
for (int i=0; i<arr.count; i++) {
NSLog(@"arr[%d] = %@",i,arr[i]);
}
//2)快速枚举法 for循环的增强模式
for (NSObject *str in arr) {
NSLog(@"%@",str);
}
//3)通过使用block遍历
[arr enumerateObjectsUsingBlock:^(id _Nonnull
obj, NSUInteger idx, BOOL * _Nonnull stop){
NSLog(@"arr[%ld] = %@",idx,obj);
}];
运行结果:
4) NSArray读写文件
//NSArray文件读写
NSArray *arr = @[@"one",@"two",@"three",@"four"];
//写入文件
if([arr writeToFile:@"/Users/mac/Desktop/a.txt"
atomically:YES]){
NSLog(@"写入成功");
}
//读取文件
NSArray *readArr = [NSArray
arrayWithContentsOfFile:@"/Users/mac/Desktop/a.txt"];
NSLog(@"readArr = %@",readArr);
运行结果:
文件内容:
5) NSArray与字符串
//定义一个数组
NSArray *arr =@[@"one",@"two",@"three",@"four"];
//把数组元素用指定符号连接成字符串
NSString *str = [arr componentsJoinedByString:@"#"];
NSLog(@"str = %@",str);//str = one#two#three#four
//把字符串用其中的字符分割成多个数组元素
//字符串一般要有规律,能被某个字符分割成多部分
NSString *str2 = @"aaa~bbb~ccc~ddd";
NSArray *arr2 = [str2 componentsSeparatedByString:@"~"];
NSLog(@"%@",[arr2 firstObject]);//打印数组第一个元素
NSLog(@"%@",[arr2 lastObject]);//打印数组最后一个元素
NSLog(@"\narr2 = %@",arr2);
12. NSMutableArray
1) NSMutableArray的基本使用
//NSMutableArray的使用
//①创建数组
//a.创建一个空数组
NSMutableArray *arr = [NSMutableArray array];
//b.创建一个数组并初始化一个元素
NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"a"];
//c.创建一个数组并初始化多个元素
NSMutableArray *arr3 = [NSMutableArrayarrayWithObjects:@"one",@"two",@"three", nil];
//d.创建一个数组,并指定长度
NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:10];
//②添加元素
//a.直接添加
[arr addObject:@"abc"];
NSLog(@"arr = %@",arr);
//b.插入到指定位置
[arr4 insertObject:@"hao" atIndex:0];
NSLog(@"arr4 = %@",arr4);
//③删除元素
//a.删除指定内容的元素
[arr2 removeObject:@"a"];
NSLog(@"arr2 = %@",arr2);
//b.删除指定位置元素
[arr3 removeObjectAtIndex:1];
NSLog(@"arr3 = %@",arr3);
//c.删除全部元素
[arr removeAllObjects];
NSLog(@"arr = %@",arr);
//④修改元素
//修改指定位置元素
[arr3 replaceObjectAtIndex:1 withObject:@"four"];
NSLog(@"arr3 = %@",arr3);
//简单方式
arr3[1] = @"two";
NSLog(@"arr3 = %@",arr3);
//⑤判断某个元素是否在数组中
BOOL isIn = [arr3 containsObject:@"two"];
NSLog(@"isIn = %d",isIn);
//⑥交换元素
[arr3 exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"arr3 = %@",arr3);
2) NSMutableArray的使用注意
不能通过@[]的方式进行赋值,@[]为不可变的
13. NSDictionary
1) NSDictionary基本使用
//NSDictionary是不可变的,一旦创建,内容不能改动
//字典的key值不能重复,重复的话无法添加进去
//key值和value值都必须是对象
//字典是无顺序的
//①创建空字典
NSDictionary *dict = [NSDictionary dictionary];
//②创建只有一组键值对的字典
NSDictionary *dict2 = [NSDictionarydictionaryWithObject:@"objOne" forKey:@"one"];
NSLog(@"dict2 = %@",dict2);
//③创建有多组键值对的字典
NSDictionary *dict3 = [NSDictionarydictionaryWithObjectsAndKeys:@"objOne",@"one",@"objTwo",@"two",@"objThree",@"three",nil];
NSLog(@"dict3 = %@",dict3);
//④快速创建字典
//@{key1值:value1值,key2值:value2值,key3值:value3值,...};
NSDictionary *dict4 =
@{@"one":@"objOne",@"two":@"objTwo",@"three":@"objThree"};
NSLog(@"dict4 = %@",dict4);
//⑤获取字典的长度
//属性count
NSLog(@"%ld",dict4.count);//3
//⑥根据key值取出value值
NSString *str = [dict4 objectForKey:@"two"];
NSLog(@"str = %@",str);
//⑦遍历字典
//获取所有得key值,得到所有的value
for(NSString *key in dict4){
NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);
}
//用block来遍历
[dict4 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@ = %@",key,obj);
}];
2) NSDictionary简写及文件操作
//简写形式创建字典
NSDictionary *dict =@{@"one":@"objOne",@"two":@"objTwo",@"three":@"objThree"};
NSLog(@"dict = %@",dict);
//简写形式获取值
NSLog(@"one = %@",dict[@"one"]);
//把字典写入文件
[dict writeToFile:@"/Users/mac/Desktop/dict.plist"atomically:YES];
//从文件读取字典
NSDictionary *dict2 = [NSDictionarydictionaryWithContentsOfFile:@"/Users/mac/Desktop/dict.plist"];
NSLog(@"dict2 = %@",dict2);
//在字典中存入数组
//一个省对应多个市
//河北省数组
NSArray *hbArr = [NSArrayarrayWithObjects:@"baoding",@"shijiazhuang",@"chengde",nil];
//北京数组
NSArray *bjArr = [NSArrayarrayWithObjects:@"chaoyang",@"changping",@"haidian",nil];
NSDictionary *dict3 =@{@"hb":hbArr,@"bj":bjArr};
[dict3 writeToFile:@"/Users/mac/Desktop/dict3.plist"atomically:YES];
14. NSMutableDictionary
//①创建字典
//空字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//指定大小
NSMutableDictionary *dict2 = [NSMutableDictionarydictionaryWithCapacity:5];
//快速创建
NSMutableDictionary *dict3 = [NSMutableDictionary dictionary];
dict3.dictionary =@{@"1":@"111",@"2":@"222"};
NSLog(@"dict3 = %@",dict3);
//②给字典添加键值对
[dict setValue:@"objOne" forKey:@"one"];
[dict setValue:@"objTwo" forKey:@"two"];
[dict setValue:@"objThree" forKey:@"three"];
NSLog(@"dict = %@",dict);
[dict2 setValue:@"objOne" forKey:@"one"];
[dict2 setValue:@"objTwo" forKey:@"two"];
NSLog(@"dict2 = %@",dict2);
//③删除键值对
//删除一组
[dict removeObjectForKey:@"one"];
NSLog(@"dict = %@",dict);
//删除全部
[dict removeAllObjects];
NSLog(@"dict = %@",dict);
//④修改
//普通形式
[dict2 setObject:@"valueOfOne" forKey:@"one"];
NSLog(@"dict2 = %@",dict2);
//简写形式
dict2[@"two"] = @"valueOfTwo";
NSLog(@"dict2 = %@",dict2);
//⑤查找
//先获取key的数组,再判断是否存在某个key
NSArray *arr = [dict2 allKeys];
if ([arr containsObject:@"one"]) {
NSLog(@"存在");
}
运行结果截图: