一.字符串
1.字符串可以分为2类
(1)NSString(父类):不可变字符串。
(2)NSMutableString(子类):可变字符串
2.字符串的创建
(1)NSString *s2 = [[NSString alloc] initWithString:@"jack"];(不用)
(2)NSString *s1 =@"jack";(创建固定格式的字符串用这个)
(3)NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10];(创建的字符串需要传递变量格式)
(4)NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];(把C语言字符串转变成OC字符串的创建方式)。也可也用对象方法把OC字符串转换成C语言字符串:constchar *c = [s4 UTF8String];
(5)NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil];(通过文件路径读取文件内容来创建字符串)
(6)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];(根据URL读取URL地址的内容来创建字符串)
3.用类方法创建字符串
一般都会有一个类方法跟对象方法(init)配对来创建字符串。上面的那些方法可以全部替换成类方法创建对象
(1)[[NSString alloc] initWithString:@"jack"] == [NSString stringWithString:@"jack"]
(2)[[NSString alloc] initWithFormat:@"age is %d", 10] ==[NSString stringWithFormat:@"age is %d", 10]
(3)[[NSString alloc] initWithUTF8String:"jack"]==[NSString stringWithUTF8String:"jack"]
(5)[[NSString alloc] initWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil]==
[NSString stringWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil]
(6)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];
[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil] ==等价于
[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]
4.字符串的导出
(1)[字符串对象 writeToFile:@"文件路径" atomically:YES encoding:NSUTF8StringEncoding error:nil]:将这
个字符串写入这个文件里面去,会覆盖原来的数据,慎用。
(2)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];[字符串对象 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]:将这个字符串写进
这个URL文件里面去。
(1)[NSMutableString对象 appendString:字符串对象]:将后面的字符串拼接到前面对象的后面。
(2)[NSMutableString对象 deleteCharactersInRange:NSRange变量]:NSMutableString对象中删除NSRange变量表示范围的字符。
[NSString对象 stringByAppendingString:字符串对象]:将NSString对象和后面的字符串对象拼接返回一个新的OC字符串。
二.OC数组
1.数组可以分为2类
(1)NSArray(父类):不可变数组。
(2)NSMutableArray(子类):可变数组
2.OC数组只能存放OC对象,不能存放非0C对象(基本数据类型,枚举,结构体),OC数组不能存放nil值。
(1)NSArray *array1 = [NSArray array](创建一个空数组,并且永远是空数组)
(2)NSArray *array2 = [NSArray arrayWithObject:@"jack"](创建永远只有一个元素的OC数组)
(3)NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil](创建可以存放多个OC对象元素的数
组,nil是数组元素结束的标记,必须要有)
(4)最常用的创建NSArray对象的方法:
NSArray *array5 =@[@"jack",@"rose",@"4324324"](@加上[],中括号里面写OC数组的元素,这种创建方法只适合
NSArray对象的数组,可变数组不能用这种创建方式)
(5)NSArray的元素个数:可用[NSArray对象 count] 或者NSArray对象.count求出数组个数,因为在数组对象里面有
一个私有的_count成员变量(@property (readonly)NSUInteger count)
4.创建NSMutableArray数组
(1)最常见的创建方式:NSMutableArray *array3 = [NSMutableArray arrayWithObjects:@"jack", @"rose", nil]
(2)可变OC数组可以添加元素:[NSMutableArray对象 addObject:OC对象]
(3)删除整个数组:[NSMutableArray对象 removeAllObjects]
(4)删除1个数组元素[NSMutableArray对象 removeObject:@"jack"](删除完后后面的排序会向前一位)
(5)根据数组下标删除一个数组元素:[NSMutableArray对象 removeObjectAtIndex:数字]
(6)错误写法:[NSMutableArray对象 addObject:nil](OC数组里面存放的是OC对象,nil是数组的结束标志)
5.遍历数组的方法
OC数组里面的每个元素可用数组名和下标访问(和C语言数组一样)
(1)用一个for循环遍历所有数组每个元素
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}
(2)用一个for (id obj in array)遍历每个元素
int i = 0;
for (id obj in array) // 定义一个id类型的变量obj,挨个访问数组array里面的元素,并把值赋给obj。
{
NSUInteger i = [array indexOfObject:obj]; //这个对象方法可以根据元素值求出元素的下标。
NSLog(@"%ld - %@", i, obj);
i++;
}
(3)用block遍历每个元素
[array enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 0)
{
// 停止遍历
*stop = YES;
}
}];
6.数组中元素访问
数组是有顺序的,根据创建顺序,每个下标对应一个元素
(1)[NSMutableArray对象 objectAtIndex:下标数字]:根据下标数字用对象方法访问元素
(2)NSMutableArray对象[下标数字]:和C数组一样直接根据下标数字访问。
7.OC数组是个对象可以%@输出字符数组对象,输出的结果是:(元素1的值.......)。
三.NSSet(集合)
1.NSSet可以分为2类
(1)NSSet(父类):不可变集合。
(2)NSMutableSet(子类):可变集合
2.NSSet的创建方式(和数组创建很类似,但是不能直接赋值(@[])):
[NSSet setWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];
3.因为集合是没有顺序的,里面的没有元素没有对应下标,取出集合元素只能随机取:
[NSSet对象 anyObject]
4.集合个数
可以用成员变量_count的get方法或者点语法取出集合里面有几个元素
5.NSMutableSet对象的添加和删除元素的方法
(1)添加元素:[NSMutableSet对象 addObject:OC对象]
(2)删除元素(直接删除值得方法):[NSMutableSet对象 removeObject:OC对象]
6.NSSet和NSArray的对比
共同点:
(1)都是集合,都能存放多个OC对象
(2)只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
(3)本身都不可变,都有一个可变的子类
不同点:
NSArray有顺序,NSSet没有顺序
四.NSDictionary(字典)
1.NSDictionary可以分为2类
(1)NSDictionary(父类):不可变字典。
(2)NSDictionary(子类):可变字典
2.字典里面存的值是没有顺序的,但是存放的都是键值对:索引--->文字内容(key--->value)
(1)创建只有1个元素的字典:[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
(2)创建数组方式的字典:[NSDictionary dictionaryWithObjects:存放值得数组对象 forKeys:存放键的数组对象]
(3)创建直接多个元素的字典:[NSDictionary dictionaryWithObjectsAndKeys: 值1对象, 键1对象",值1对象, 键1对象"....,nil]
(4)最常用的创建方式:@{键1对象 :值1对象,键2对象 : 值2对象......};
4.根据键取值
(1)[NSDictionary对象 objectForKey:键对象]:返回值是值对象。
(2)最常用的方法:NSDictionary对象[键对象]
5.求里面元素的个数
根据成员变量_count的get方法或者点语法求出元素个数,这元素个数指的键值对的个数。
(1)添加键值对:[NSMutableDictionary对象 setObject:@"jack" forKey:@"name"],添加的如果是同一个键,则会覆盖原来的值。字典不允许有相同的key,但允许有相同的value(Object)
(2)移除键值对(根据键删除键值对):[NSMutableDictionary对象 removeObjectForKey:键对象]
7.字典的遍历
(1)for循环遍历
NSArray *keys = [dict allKeys]; // 用对象方法allkeys获得所有键,返回的是一个数组
for (int i = 0; i<dict.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@", key, object);
}
(2)用block变量字典
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
}];
五.总结
1.NSArray\NSMutableArray(数组)
(1)有序
(2)快速创建(不可变):@[obj1, obj2, obj3]
(3)快速访问元素:数组名[i]
2.NSSet\NSMutableSet(集合)
无序
3.NSDictionary\NSMutableDictionary(字典)
(1)无序
(2)快速创建(不可变):@{key1 : value1,key2 : value2}
(3)快速访问元素:字典名[key]