A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨光0618 中级黑马   /  2016-8-29 23:44  /  1276 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

根据老师上课讲的,自己敲的笔记
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)];
    • 从下标为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”];
    • 正确的
    • 追加一个jack到str里
  • 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.将可变字符串对象转换为不可变字符串对象
  • 调用对象的copy方法

Mark 03 NSArray

1.NSArray是OC中的一个类,是数组
  • NSArray数组中只能存储OC对象,非OC对象无法存储
  • 长度固定
  • NSArray数组中的每一个元素都是连续的,有下标索引
  • NSArray数组的元素的类型是id类型的
2.NSArray创建对象的方法
  • NSArray *arr = [NSArray new];
    • 这种创建没有意义,因为元素为0个
  • 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常用方法
  • 得到数组的长度
    • [str count];
  • 获取数组中指定下标的值
    • 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);
      • 最后必须用nil结尾
  • 简要创建字典的方式
    • NSDictionary *dict1 = @
          {
              @"name":@"jack",
              @"age":@"18",
              @"height":@"178"
          };
          NSLog(@"dict1 = %@",dict1);
  • 如何取出存储在字典中的数据
    • 字典数组中的数据不能使用下标去取,只能使用key
      • dict[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效率同样更好


1 个回复

倒序浏览
学习了,收藏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马