FOUNDATION简介
foundation 单词的解释就是基础
乔帮主 离开苹果以后, 开创了 NeXT -> 一套用来开发的类库
Foundation 库是基础, 是关注基本数据类型和基本类的使用的库
主要学习: 字符串处理, 数组处理, 键值对处理, …
11-字符串的常见用法
字符串操作类有两个: NSString(不可变字符串), NSMutableString(可变字符串)。
1, 掌握一个规律, 将常用的方法分类: 增删改查与其他
2, 如果有的方法有多种情况, 我们首先学习最简单的, 使用熟练后在考虑复杂的
NSString 是不可变字符串, 主要讨论 增加 和 查询与其他
增加(创建方法)
1, 字面量 2, 构造方法 3, 快速创建对象方法
URL 统一资源地址, 就是网址
查询类的方法
1, 比较
isEqualToString
compare
strcmp("1", "2"); // 如果 > 返回 大于0的数; 如果 == 返回 0; 如果 < 返回小于0的数
01-字符串检查前后缀方法
所谓的检查前后缀, 就是判断字符串是以什么开头或者以什么结尾
关键字: has
hasPrefix 判断前缀 hasSuffix 判断后缀的
如果没有找到, 就会返回 location 为一个非常大的数字, length 为 0
这个非常大的数字在 OC 中被定义为 NSNotFound
字符串截取
字符串截取就是在一个字符串中, 将符合要求的一部分字符串取出来
关键字 substring
在 科学计算中 表示范围的时候, 一般左边取得到, 右边取不到
字符串的替换
将一个字符串中的某一个部分替换成需要的样子
关键字 stringBy + replace
字符串与基本数据的转换: 字符串提供了一系列的 "类型Value” 方法
去除首尾空格:去除首尾空格
关键字 stringBy + trimming
NSMutableString简介
对于 可变字符串 使用最多的就是创建字符串和构造字符串
也就是说, 追加与插入使用的比较多. 一般都是使用 NSString
使用可变的字符串, 其目的就是为了构造动态的字符串
因此使用的时候, 都是首先创建一个 空的字符串, 作为容器
然后根据需要构造相应的字符串
1, 加入字符串 appendString appendFormat
NSArray的基本使用
数组的概念
1, C 语言的数组不方便存储对象
2, C 语言数组不是面向对象的, 缺少强大的方法
3, C 语言的数组是定长的数组, OC 中提供了可变长度的数组
NSArray 不可变数组
NSMutableArray 可变数组
数组的常用方法 1, count 属性, 用来活动数组中元素的个数 NSLog(@"%lu", arr.count);
2, objectAtIndex 方法
NSString *s = [arr objectAtIndex:1];
NSLog(@"%@", s);
3, 遍历
// for (int i = 0; i < arr.count; i++) {
// NSString *s = [arr objectAtIndex:i];
// NSLog(@"%@", s);
// }
在数组中还提供了快速获得首尾元素的属性 :arr.firstObject // 最开始的元素
arr.lastObject // 最后的元素
数组提供了一个方法, IndexOfObject 表示对象的索引
数组的遍历:除了可以使用 for 循环来遍历数组外,可以使用for-in循环和 block 来进行遍历
使用临时变量访问结果
}
语法 [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
obj 表示当前循环的临时变量, 与 for-in 中的临时变量的含义相同
idx 当前下标, 好比 for 循环中的 i
stop 表示是否停止, 与 break 相同
字符串与数组的连用
NSMutableArray
使用可变数组基本上就是为了实现动态的生成数组
一般就是生成一个空的数组, 然后的将元素一个个加入进来
键值对数据的概念与意义
键值对
1, 为什么需要这个数据类型. 数组可以存储数据, 但是查找比较费劲
2, 是什么类型
键值对是一个"散列表(哈希表, hash)". 他的特点就是按照键来存储数据
系统中在存储数据的时候, 都是按照键和值一起存储的
首先根据键算出一个唯一的地址来. 然后将数据存储到该地址处
那么很容易根据键九算出地址取出数据. 因此在查找技术中常常使用该方法
可变键值对
一般来讲, 可变键值对也是创建一个空的作为容器使用
NSMutableDictionary *dic1 = [[NSMutableDictionary alloc] init];
NSMutableDictionary *dic2 = [NSMutableDictionary dictionary];
NSFileManager
该类完成对文件的基本信息的访问与基本操作, 保存创建, 删除, 移动, 复制
1, 该类为一个单例类
创建的时候使用 defaultManager 类方法来获得对象
常见的结构体
NSPoint 和 CGPoint(ios一般用这个)
NSNumber与NSValue
NSDate
NSDateFormatter 是一个格式化日期与字符串的类
他可以轻松的实现字符串与时间对象的互相转换, 并且可以格式化任意的输入形式
集合的内存管理
1. 对象别集合引用后,所有者就会 +1 2.集合被释放后,会将引用的所有对象都 —1
copy概念的引入
系统中 NSObject 提供了 copy 的方法(mutableCopy)
// 该方法用来复制当前对象, 创建一个新的副本
// 但是该方法如何创建是未定义的, 它调用了 copyWithZone: 来具体实现如何创建
// 如果我们需要自己创建副本, 就需要实现该方法
// 而该方法由 NSCopying 来提供
深拷贝与浅拷贝
第一种观点 1 第一种观点
1> 浅拷贝, 是指拷贝引用变量
Person *p1 = [Person new];
Person *p2 = p1; // 浅拷贝
2> 深拷贝, 就是连同对象数据一起全部拷贝
Person *p3 = [Person new];
p3.属性 = p1.属性;
第二种观点 2 第二种观点
拷贝 就是要 复制
如果对象中的属性都是值类型, 那么深拷贝与浅拷贝没有区别
如果对象属性含有类类型的, 那么深拷贝与浅拷贝才有区别