OC字符串(NSString/NSMutableString)
NSString:不可变字符串
- 字符串创建:
//直接创建 NSString *s1=@”jack”; //调用方法创建 NSString *s2=[[NSString alloc] initWithFormat:@”age is %d”,10]; //对应的类方法 NSString *str3=[NSString stringWithFormat:@"my name is jack"];
- C语言字符串与OC字符串之间的转换
//C语言字符串转换OC字符串 NSString *s3==[[NSString alloc] initWithUTF8String:”jack”; //对应的类方法 NSString *s4=[NSString stringWithUTF8String:"jack"]; //OC字符串转换C语言字符串 const char *c=[s3 UTF8String];
- URL:资源路径(固定写法 -> 协议头://路径)
网络路径 -> fttp://
本地路径 -> file://
ftp服务器路径 -> ftp://
- 文件中读取字符串及字符串写入文件
从文件中读取字符串:
NSUTF8StringEncoding(编码方式,此编码可处理中文)
第一种读取方式(只能读取文件file)
NSString *str=[[NSString alloc] initWithContentsOfFile:文件路径 encoding:NSUTF8StringEncoding error:nil];
对应的类方法
NSString *str=[NSString stringWithContentsOfFile:@"/Users/zhs/Desktop/test.txt" encoding:NSUTF8StringEncoding error:nil];
第二种读取方式(通过URL资源路径,可读任何资源)
//将文件路径按固定格式(file://)包装成NSURL对象 NSURL *url=[[NSURL alloc] initWithString:@"file:///Users/zhs/Desktop/test.txt"]; //读取包装后的url资源 NSString *str6=[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; //对应的类方法 NSString *str9=[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
字符串写入文件:
[str writeToFile:文件路径 atomically:YES encoding:编码方式 error:nil];
- 访问字符串元素
NSString *str1=@"jack"; //调用方法characterAtIndex遍历 char c=[str1 characterAtIndex:2]; NSLog(@"%c",c);
一般都会有一个类方法跟对象方法配对,且类方法以类名开头。
NSMutableString:可变字符串
//创建可变字符串对象s1
NSMutableSting *s1=[NSMutableString stringWithFormat:@”my age is 10”];
//将11 12 拼接在s1字符串后面
[s1 appendSting:@”11 12”];
NSRange range=[s1 rangeOfString:@”is”];
//删除字符中s1中的is
[s1 deleteCharactersInRange:range];
常见集合类
-
NSArray/NSMutableArray
-
NSSet/NSMutableSet
-
NSDictionary/NSMutableDictionary
NSArray(OC数组类,隶属集合类)
OC数组只能存放OC对象,且不能存放nil
- 创建OC数组对象
//创建OC空数组
NSArray *arr1=[NSArray array];
for (id obj in arr1 ) {
NSLog(@"%@",obj);
}
//创建只有一个对象的数组
NSArray *arr2=[NSArray arrayWithObject:@"jack"];
for (id obj in arr2) {
NSLog(@"%@",obj);
}
//创建包含多个对象的数组
NSArray *arr3=[NSArray arrayWithObjects:@"jack",@"lucy",@"peter",nil]; //nil不可缺失,通过nil判断数组中的对象元素
//快速创建包含多个对象的数组,<span style="color:red;">一般用这个</span>
NSArray *arr4=@[@"jack",@"lucy",@"peter"];
- 访问数组中的元素
[数组名 objectAtIndex:下标];调用对象方法访问
数组名[下标];直接访问,一般用这个
- 数组遍历
//第一种遍历方式(快速遍历)
for (id obj in arr3) {
//可调用方法获得对象元素下标
NSUInteger i=[arr3 indexOfObject:obj];
NSLog(@"%ld第一方式%@",i,obj);
}
//第二种遍历方式
for (int i=0; i<[arr3 count]; i++) {
NSLog(@"第二方式1%@",arr3[i]);
NSLog(@"第二方式2%@",[arr3 objectAtIndex:i]);
}
//第三种遍历方式(利用block遍历)
[arr3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第三方式%@",obj);
}]; //每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当做参数传给block,*stop用于停止循环
- 不可变数组常用的方法
NSArray *array=[NSArray arrayWithObjects:@"1",@"2" ,nil]; /* 1.对象方法arrayByAddingObject 将原有数组与新增对象拼接为新数组并返回新数组 */ NSArray *array1=[array arrayByAddingObject:@"3"]; /* 2.对象方法arrayByAddingObjectsFromArray 将原有数组与另一数组拼接为新数组并返回新数组 */ NSArray *array2=[array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"4",@"5", nil]]; NSLog(@"%@",array1); NSLog(@"%@",array2); NSArray *array3=[NSArray arrayWithObjects:@"1",@"2",@"3",nil]; /* 3.对象方法subarrayWithRange 截取原数组中某范围(range)的元素形成新数组,并返回 新数组 */ NSArray *array4=[array3 subarrayWithRange:NSMakeRange(0, 2)]; NSLog(@"%@",array4); /* 4.对象方法componentsJoinedByString 将数组中的所有对象元素以某分隔符号连接生成字符串并返 回生成的字符串 */ NSString *str=[array3 componentsJoinedByString:@"-"]; NSLog(@"%@",str); /* 5.对象方法writeToFile 将数组内容写入生成xml文件 */ NSString *url=@"/Users/zhs/Desktop/array.xml"; [array3 writeToFile:url atomically:YES]; /* 6.类方法arrayWithContentsOfFile 从文件中读取数组内容(文件格式必须为xml) */ NSArray *array5=[NSArray arrayWithContentsOfFile:url]; NSLog(@"%@",array5);
NSMutableArray:可变数组
- 创建OC数组对象
NSMutableArray *array1=[NSMutableArray array]; 创建一个可变空数组
NSMutableArray *array2=[NSMutableArray arrayWithObject:@”jack ”]; 创建存储一个对象的数组
NSMutableArray *array3=[NSMutableArray arrayWithObjects:对象1,对象2,...,nil];nil不可缺失,通过nil判断数组中的对象元素
可变数组NSMutableArray不支持快速创建数组@[对象1,对象2…];因为此方法返回值类型为NSArray类型的数组对象
- 添加、删除数组对象元素
[array1 addObject:@”jack”;] //添加数组对象元素
[array1 removeAllObjects]; //删除所有数组对象元素
[array1 removeObjectAtIndex:1]; //删除下标为1的数组对象元素
NSSet:与数组相同,但没有顺序
- 创建NSSet对象
NSSet *st=[NSSet set]; 创建一个空NSSet
NSSet *st1=[NSSet setWithObjects:@”jack ”,@”tom”,@”mik”,nil]; 创建存储多个对象的NSSet
- NSSet中对象访问
NSString *st1=[s2 anyObject]; //随机拿出一个元素
NSMutableSet:可变
- 创建NSMutableSet对象
NSMutableSet *st=[NSMutableSet set]; 创建一个空数组
NSMutableSet *st1=[NSMutableSet setWithObjects:@”jack ”,@”tom”,@”mik”,nil];创建存储多个对象的NSMutableSet
- NSMutableSet中对象访问
[st addObject:对象];
[st removeObject:对象];
- NSSet和NSArray的对比
共同点:
都是集合,都能存放多个OC对象
只能存放OC对象,不能存放非OC对象类型
本身都不可变,都有一个可变的子类
不同点:
NSArray有顺序,NSSet没有顺序
NSDictionary
存储键值对(一个索引对应一个对象元素,即键值对),没有顺序,不能存储相同的key,但能存储相同的元素。
- 字典创建
//创建只存储一组键值对的字典、
NSDictionary*dict=[NSDictionary dictionaryWithObject:元素值(@”jack”) forKey:索引值(@”name”)];
//创建存储多个键值对字典
NSDictionary*dict=[NSDictionary dictionaryWithObjects:数组 forKeys:数组];
NSDictionary*dict=[NSDictionary dictionaryWithObjectsAndKeys:元素,对应索引,元素,对应索引,…,nil];
快速创建字典(通常用这个)
NSDictionary*dict=@{索引:对应元素,索引:对应元素,...};
- 字典元素访问
id obj=[dict objectForKey:索引];
快速访问字典元素
id obj=dict[索引];
- 字典实例
//字典创建 //创建存储一组键值对的字典 NSDictionary *dic1=[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; //创建存储多组键值对的字典 //第一种方式 NSArray *arrobj=[NSArray arrayWithObjects:@"jack",@"18",@"郑州", nil]; NSArray *arrkey=[NSArray arrayWithObjects:@"name",@"age",@"address", nil]; NSDictionary *dic2=[NSDictionary dictionaryWithObjects:arrobj forKeys:arrkey]; //第二种方式 NSDictionary *dic3=[NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"18",@"age",@"郑州",@"address", nil]; //快速创建字典 NSDictionary *dic4=@{@"name":@"jack",@"age":@"18",@"address":@"郑州"}; //访问字典元素 //调用方法访问 NSLog(@"访问年龄:%@",[dic2 objectForKey:@"age"]); //快速访问 NSLog(@"访问名字:%@",dic2[@"name"]); //遍历字典 [dic2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"dic2%@:%@",key,obj); }]; [dic3 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"dic3%@:%@",key,obj); }]; [dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"dic4%@:%@",key,obj); }];
NSMutableDictionary
同样不支持快速创建,其他同NSMutableDictionary
- 添加删除字典元素:
[字典名 setObject:元素forKey: 索引]; //添加
可以重复对一个索引进行赋值,后面赋值覆盖前面赋值
[字典名 removeObjectForKey: 索引]; //删除
- 遍历字典
利用block遍历字典
[dict enumerateObjectsUsingBlock:
//每遍历到一对键值,就会调用一次block,并且当前元素和索引位置当做参数传给block,*stop用于停止循环
^(id key,id obj,BooL *stop)]
{
NSLog(@”%ld-%@“,key,obj);
}];
- 字典实例
//创建空字典 NSMutableDictionary *mudic1=[NSMutableDictionary dictionary]; //创建存储多个键值对的字典 NSMutableDictionary *mudic2=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"18",@"age", nil]; //添加字典元素 [mudic2 setObject:@"zhengzhou" forKey:@"address"]; //遍历输出添加后的字典 [mudic2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@:%@",key,obj); }]; //删除字典元素 [mudic2 removeObjectForKey:@"address"];
集合类总结
-
NSArray/ NSMutableArray
有序
快速创建(不可变):@obj1,obj2,obj3,…];
快速访问元素: 数组名[下标];
-
NSSet/NSMutableSet
无序
-
NSDictionary/NSMutableDictionary
无序
快速创建(不可变):@{key1:value1,key2:value2,…};
快速访问元素:字典名[key];
NSNumber/NSValue
NSNumber(继承自NSValue)
作用:将基本数据类型(整型,字符型,浮点型)包装成NSNumber对象。
如:
[NSNumber numberWithInt:10]; //将整型10转为number对象
快速转换(编译器特性)
@整型;如:@10;
注:当整型为变量时,要加(),如:int a;@(a);
NSValue
作用:将各种数据类型(包括结构体,枚举等)包装成NSValue对象
//结构体CGPoint包装成NSValue对象
NSValue *value=[NSValue valueWithPoint:CGPointMake(10, 10)];
//将value对象转换为结构体CGPoint
CGPoint p=[value pointValue];
NSDate
创建NSDate对象
NSDate *date = [NSDate date];
日期格式化类:NSDateFormatter
作用:将日期对象按一定格式转换为时间字符串输出到屏幕
formatter.dateFormat=@”字符串的格式”;
//无论date=>String,还是string=>date,formatter.dateFormat设定的都是字符串的格式
//当date=>String时,formatter.dateFormat告诉formatter要转换成什么格式的字符串
//当String=>date时,formatter.dateFormat告诉formatter要转的字符串是什么格式
代码演示:
/*date转换为string*/
//创建时间对象,此对象为本句代码执行时的时间
NSDate *date = [NSDate date];
//定义一个日期格式化类对象
NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
//告诉formatter要转换成什么格式的字符串
formatter.dateFormat=@”yyyy-MM-dd HH:mm:ss ”;
//日期转换字符串
NSString *str=[formatter stringFormDate:date];
/*String转换为date*/
NSString *time = @”2014=07=21 17:56”;//注意:字符串中date部分即2014/07/21用"/"或"-"或","分隔,time部分即17:56部分
用冒号:隔开,且中间必须有空格时,formatter.dateFormat的设定可以省略
//定义一个日期格式化类对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//告诉formatter要转的字符串是什么格式
<pre name="code" class="objc">formatter.dateFormat=@”yyyy=MM=dd HH:mm”;
//字符串转换日期NSDate *date = [formatter dateFromString:time];