根据老师上课讲的,自己敲的笔记
Mark 01 Foundation框架
1.NSRange结构体变量
- Foundation中定义的一个结构体
- 这个结构体变量用来表示一个范围,一般情况下,表示子串儿在主串儿中的范围
- location : 起始下标
- length: 匹配到的长度
- NSRange结构体变量初始化
- NSRange range;
- range.location = 2;
- range.length = 3;
- NSRange range = {.location = 2,.length = 3};
- NSRange range = {2,3};
- NSRange range = NSMakeRange(2,3);
- 打印一个NSRange结构体变量
- Foundation框架提供了一个打印NSRange结构体变量的函数
- NSStringFromRange(NSRange);
- NSString *str = NSStringFromRange(range);
2.字符串截取
- NSString *str = “demo”;
- [str substringFromIndex:(2)];
- [str substringToIndex:(2)];
- [str substringWithRange:(NSRange)range];
- 截取指定范围的字符串,使用NSRange变量来确定下标位置和长度
3.字符串的替换
- NSString *str = @“很爱很爱你”;
- stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
- str = [str stringByReplacingOccurrencesOfString:@“爱" withString:@“恨”];
- 将目标字符串替换为要替换的字符串
4.字符串类型转换
- NSString *str = @“100”;
- [str intValue];
- [str doubleValue];
- 将字符串类型转换为其它数据类型
- 从头开始,能转多少转多少,如果是字符串开头,那么转出来结果为0
5.字符串的其他常用方法
Mark 02 NSMutableString
1.从NSString父类继承
- NSString类型的字符串不可更改
- 但NSMutableString创建的对象具有可变性
- 所以创建的字符串对象可以更改
2.NSMutableString对象的创建
- NSMutableString *str = @“k=jack”;
- [str appendString:@“jack”];
- int num = 19;
- [str appendFormat:@“haha%dhaha”,num];
- 把19拼接到haha19haha中
- 并且追加到str里
- NSMutableString在拼接字符串时,效率要高很多倍
3.NSMutableString用途
- NSString:效率高,不拼接的时候,同一个字符串对象,如果后边还要用,就不用再创建了,拼接效率低
- NSMutableString:只要alloc new都是一个新对象,大批量(超过7次的拼接)拼接的时候效率
4.在使用NSString的地方也可以使用NSMutableString,因为NSMutableString继承自NSString
5.将可变字符串对象转换为不可变字符串对象
Mark 03 NSArray
1.NSArray是OC中的一个类,是数组
- NSArray数组中只能存储OC对象,非OC对象无法存储
- 长度固定
- NSArray数组中的每一个元素都是连续的,有下标索引
- NSArray数组的元素的类型是id类型的
2.NSArray创建对象的方法
- NSArray *arr = [NSArray new];
- NSArray *arr = [NSArray arrayWithObjects:@“jack”,@“rose”,…………,nil];
- 最常用的方法
- 当所有元素写完毕之后,后边需要接一个nil,nil在这里代表结束
- 可以存储任意的OC对象,但如果指针的值是nil,那么NSArray就会认为到此指针即结束
- 快捷创建NSArray对象的简写方式
- NSArray *arr = @[@“jack”,@“rose”];
- 这种写法最后不需要加nil
3.取出存储在NSArray数组中的数据
- 使用%@可以直接输出NSArray数组中所有元素的值
- 如果存储的是中文,使用%@输出中文时,输出的是中文的Unicode编码
- 如果以下标的来取指定元素的值,这时中文可以正常取出
- 也可以调用数组对象的对象方法:objectAtIndex:(NSUInteger);
4.NSArray常用方法
- 得到数组的长度
- 获取数组中指定下标的值
- objectAtIndex:(NSUInteger)index;
- 若下标越界,运行必报错
- 判断数组中是否包含指定的元素
- containsObject:(Objecttype)anObject
- 获取数组中首个元素和最后一个元素
- [str firstObject];
- [str lastObject];
- 若是使用这个方法获取首个或末尾的元素,不会出现空数组str[0]报错这样的错误
- 查找指定元素第一次出现的下标
- indexOfObject:(ObjectType)anObject;
5.NSArray数据的遍历
- 普通for循环遍历
- for in 循环遍历
- for (NSString *str in arr)
{
NSLog(@"%@",str);
} - 在这里str叫做迭代变量
- 执行原理
- 将数组中第0个元素的值赋值给迭代变量,然后执行循环体
- ...
- ...
- 将数组中最后一个元素赋值给迭代变量,然后执行循环体后自动结束循环
- 如果数组内存储的数据类型不同的话,()内的NSString数据类型建议使用id
- block遍历数组
- [arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"arr[%lu] = %@",idx,obj);
//obj:遍历出来的这个元素的值
//idx:遍历出来的这个元素的下标
//stop:如果想要停止遍历,就给这个stop指针指向的变量赋值为YES
if (idx == 2) {
*stop = YES;
}
}]; - NSString *str = [arr componentsJoinedByString:@"-"];
- NSArray *arr1 = [str componentsSeparatedByString:@","];
6.NSMutableArray
- 可变数组
- 继承自NSArray
- NSMutableArray *marr = @[@“jack”,@“rose”,…];
- 添加元素
- addObject:(ObjectType)
- addObjectsFromArray:(NSArray)Array;
- 移除元素
- - (void)removeAllObjects;
- - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
- - (void)removeObject:(ObjectType)anObject;
- - (void)removeObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
- - (void)removeObjectIdenticalTo:(ObjectType)anObject;
- - (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)cnt NS_DEPRECATED(10_0, 10_6, 2_0, 4_0);
- - (void)removeObjectsInArray:(NSArray<ObjectType> *)otherArray;
- - (void)removeObjectsInRange:(NSRange)range;
7.数组的持久化
- 将数组中的所有元素存储到磁盘上的文件
- 一般写到plist文件中
Mark 04 键值对存储数据
1.NSDictionary(字典)
- 不可变字典数组
- 首先是个数组
- 其次是此键值对的形式来存储数据的
- 存储的数据只能是OC对象,别名只能是遵循了NSCopying协议的OC对象
- 存储的键值对是固定的,不能动态的新增和删除
- 创建一个字典数组
- NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"rose",@"name",@"18",@"age", nil];
NSLog(@"%@",dict);
- 简要创建字典的方式
- NSDictionary *dict1 = @
{
@"name":@"jack",
@"age":@"18",
@"height":@"178"
};
NSLog(@"dict1 = %@",dict1);
- 如何取出存储在字典中的数据
- 字典数组中的数据不能使用下标去取,只能使用key
- 使用对象方法取值
- [dict1 objectForKey:@"age”];
- 字典中的键值不能重复
- 遍历NSDictionary数组
- for (id item in dict1)
{
NSLog(@"%@",dict1[item]);
} - [dict1 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop)
{
//key:键
//obj:值
//stop:停止遍历的条件
NSLog(@"%@ = %@",key,obj);
if ([key isEqualToString:@"height"])
{
*stop = YES;
}
}];
- NSDictionary数组存储原理
- 存储时,根据key的值做一个hash算法,算出一个下标
- 取值时,仍然根据key值做一个hash算法,算出这个key所在的下标然后取值
- 与NSArray区别
- 存储时,NSArray效率更好
- 全部取值时,NSArray效率同样更好
|
|