OC语言大总结(下)
2015-10-08 09:06
429 查看
根据OC学习的知识点,总结了一下,希望能帮到大家!
作者:韩俊强 未经允许,请勿转载!
关注博主:http://weibo.com/hanjunqiang
上接:http://blog.sina.com.cn/s/blog_814ecfa90102vuu1.html
第五节 数组、字典、集合
字典、集合:http://blog.sina.com.cn/s/blog_814ecfa90102vub9.html
数组:http://blog.sina.com.cn/s/blog_814ecfa90102vu8m.html
第六节 类与对象
封装:http://blog.sina.com.cn/s/blog_814ecfa90102vtvz.html
上接:http://blog.sina.com.cn/s/blog_814ecfa90102vuu1.html
限时代码:
欢迎学习本文档,未经博主允许,不得私自转载!
作者:韩俊强 未经允许,请勿转载!
关注博主:http://weibo.com/hanjunqiang
上接:http://blog.sina.com.cn/s/blog_814ecfa90102vuu1.html
第五节 数组、字典、集合
字典、集合:http://blog.sina.com.cn/s/blog_814ecfa90102vub9.html
数组:http://blog.sina.com.cn/s/blog_814ecfa90102vu8m.html
知识点 | 注意事项 |
容器简介 | 容器类,管理一组对象类型的数据. iOS中存放数据的容器类都称为集合 |
数组简介 | OC中数组是有序集合,只能存放对象类型; 数组有下标(index)的概念,靠下标查找元素,下标从0开始; 数组分不可变数组(NSArray)和可变数组(NSMutableArray). |
不可变数组 | 数组的创建; 获取数组元素个数; 根据index获取数组中对象; |
不可变数组(NSArray)的创建 | 常用实例方法:—initWithObjects: 常用便利构造器:+arrayWithObjects: |
获取元素个数,根据index获取对象 | 获取元素个数:—count 根据index获取对象:—objectAtIndex: |
可变数组(NSMutableArray) | NSMutableArray是NSArray的子类,继承了NSArray的所有方法 可变数组可以在数组本身基础进行增,删,改,查等操作. 常用方法: 创建数组对象; 添加元素,插入元素; 删除元素,替换元素; 交换指位置的两个元素; |
(可变数组)NSMutableArray的创建 | 实例方法: - initWithCapacity: - initWithObjects: 便利构造器: + arrayWithCapacity: + arrayWithObjects: |
添加元素,插入元素 | 添加元素: - addObject: 插入元素: - insertObject:atIndex: |
删除元素,替换元素 | 删除元素: - removeObjectAtIndex: - removeLastObject: - removeAllObjects: 替换元素: - replaceObjectAtIndex:withObject: |
交换指定位置的两个元素 | - exchangeObjectAtIndex:withObjectAtIndex: |
数组的遍历 | 数组的遍历:将数组从头到尾全部筛选一遍; 通常结合for循环使用,有多少元素就循环多少次; 快速遍历for—in |
字典简介 | 对于”name:小三”来讲,key就是”name”,key对应的value是”小三”; 字典用于保存具有映射关系(key-value对)数据的集合; 一个key-value对认为是一个条目(Entry),字典是存储key-value对的容器 |
字典特点 | 与数组不同,字典靠key存取元素; key不能重复,value必须是对象; 键值对在字典中是无序存储的; 字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary) |
不可变字典(NSDictionary) | 不可变字典一旦创建,键值对就不可更改,不可添加,不可删除. 不可变字典仅能被读取key或者value 常用方法: 创建字典对象 获取所有key值,获取所有value值 通过key值查询value |
不可变字典(NSDictionary)的创建 | 实例方法: initWithObjectsAndKeys: 便利构造器: + dictionaryWithObjectsAndKeys: |
获取所有的key和value,通过key查询value | 获取所有key: allKeys 获取所有value: allValue 通过key查询value: - objectForKey |
可变字典(NSMutableDictionary) | NSDictionary的子类 可以对可变字典的键值对进行增,删,改 常用方法: 创建可变字典对象 添加键值对 修改key对应的value 删除键值对 |
可变字典(NSMutableDictionary)的创建 | 实例方法: - initWithObjectsAndKeys: initWithCapacity: 便利构造器: + dictionaryWithObjectAndKeys: |
添加,修改,删除键值对 | 添加,修改键值对: setValue:ForKey: setObject:ForKey: 删除键值对: -removeObjectForKey: |
字典的遍历 | 遍历allKeys 遍历allValues 遍历所有的键值对 |
集合 | 数学中有集合的的概念 比如:整数集,自然数集. 再比如:集合{1,2,3,4},集合{2,3,5,6} iOS中也有集合类与数学中的集合对应 |
集合的特点 | 与数学中的集合一样,集合中的元素唯一 存储的元素是无序的 存储元素必须是对象类型 iOS中用Set表示集合,分NSSet和NSMutableSet |
不可变集合(NSSet) | 常用方法: 创建集合对象 获取元素个数 获取集合中的某个元素 判断集合中是否包含某个对象 |
不可变集合(NSSet)的创建 | 实例化方法: initWithObjects: 便利构造器: + setWithObjects: |
获取不可变集合(NSSet)的元素个数及某个元素 | 获取元素个数: count 获取某个元素: - anyObject |
判断集合是否包含某个元素 | - containsObject: |
可变集合(NSMutableSet) | 常用方法: 创建集合对象 添加元素 删除元素 |
可变集合(NSMutableSet)的创建 | 实例化方法: initWithObjects: 便利构造器: - setWithObjects: |
可变集合(NSMutableSet)元素的添加,删除 | 添加元素: addObject: 删除元素: - removeObject: |
计数集合特点 | NSCountedSet是NSMutableSet的子类 能记录元素的重复次数 在set的基础上添加了计数功能 - countForObject: |
封装:http://blog.sina.com.cn/s/blog_814ecfa90102vtvz.html
知识点 | 注意事项 |
数组的遍历 | NSArray *array = @[@“西游记”,@“三国演义”,@“红楼梦”,@“水浒传”]; 方法一:for循环 for(int i = 0;i < array.count ;i ++){NSLog(@“%@”,array[i]);} 方法二:枚举器 NSEnumerator *enumerator = [array objectEnumerator]; NSString *object = nil; while(object = [enumerator nextObject]){NSLog(@“%@”,object);} 方法三:快速枚举(for in) for(NSString *object in array){NSLog(@“%@”,object);} |
字典的遍历 | NSDictionary *dictionary = @{@“name”:@“张三”,@“sex”:@“男”,@“age”:@“20”} 方法一:for循环 NSArray *array01 = [dictionary allKeys]; for(int i = 0;i < array.count;i++){NSLog(@“%@—%@”,array[i],dictionary[array[i]]);} 方法二:枚举器 NSEnumerator *keyEnumerator = [dictionary keyEnumerator]; NSString *key = nil; while(key = [keyEnumerator nextObject]){NSLog(@“%@—%@”,key,dictionary[key]);} 方法三:快速枚举(for in) for(NSString *key in dictionary){NSLog(@“%@—%@”,key,dictionary[key]);} |
集合的遍历 | NSSet *set = [NSSet setWithObjects:@“zhao”,@“qian”,@“sun”,@“li”,nil]; 方法一:for 循环 NSArray *array = [set allObjects]; for(int i = 0; i< array.count;i++){NSLog(@“%@”,array[i]);} 方法二:使用枚举器 NSEnumerator *enumerator =[set objectEnumerator]; NSString *object = nil; while(object = [enumerator nextObject]){NSLog(@“%@”,object);} 方法三:快速遍历(for in) for (NSString *object in set){NSLog(@“%@”,object); |
for in | 1.是 oc 的快速枚举语法,内部封装了枚举器。 2.数组 for in枚举的是数组元素 3.字典 for in枚举的是字典中的 key,因为 key 是唯一的 4.集合 for in 枚举的是集合中的元素; 5.如果用 for in 来枚举一个可变容器,不能在枚举期间对容器做任何修改,即:不能添加,删除等。如果需要在枚举期间做修改,请使用普通for 循环,而不要用 for in |
不可变数组排序方法 | 排序方法:NSArray *array02 = [array01 sortedArrayUsingSelector:@selector(compareByNameAscending:)]; 构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortedArrayUsingDescriptor:@[descriptor,….]] |
可变数组排序方法 | 排序方法:NSArray *array02 = [array01 sortUsingSelector:@selector(compareByNameAscending:)]; 构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortUsingDescriptor:@[descriptor,….]] |
SEL | 是你数组元素 元素与元素之间 的比较方法,如果数组是 person,就写 person 与 person 的比较方法。如果数组是 string,就写 string 与 string 的比较方法,如果数组是 teacher,就写 teacher 与 teacher 之间的比较方法。总之,数组元素是谁,就让第 j 个元素与第 j+1个元素比,你让它按年龄比,就给它比较年龄的方法,让他按身高比,就给它比较身高的方法。 |
小结 | 1.官方推荐的排序方法:使用 NSSortDescriptor(描述器排序)进行排序。这种方式可以实现复杂排序,可以设置n个排序条件,下标0放第一排序条件,下标1放第二排序条件,以此类推。。。 2.不可变数组也可以排序,只不过自身不会发生变化,会创建一个新的数组,存放排好序的元素,并把这个数组返回。 3.可变数组可以对自身排序 4.可变数组排序方法没有返回值。方法名第一个单词,是个动词。 |
限时代码:
课程 | 题目 | 时间 | 对应的项目名称 |
1. 初始类和对象 | 1. 创建Person类 2. 包含实例变量(姓名,年龄,性别),可见度为公开 3. 包含方法(打招呼sayHi, 自我介绍introduceSelf) 4. 创建2个Person对象(创建的学生默认年龄为18岁),分别赋值,并发送sayHi和intorduceSelf消息 提示:创建学生默认年龄18岁,重写init方法 | 7min | Lesson-01 |
2. 实例变量可见度和方法 | 1. 创建Student类 2. 包含实例变量(@public:住址,兴趣 @protected:姓名、年龄 @private:性别) 3. 为可见度修饰词是@protected 和 @private 修饰的实例变量添加赋值、取值方法 4. 添加自定义初始化方法,包含两个参数(initWithName:age:)和sayHi方法 5. 创建Student对象,给实例变量赋值,并给对象发送sayHi消息 | 15min | Lesson-02 |
3. 继承、初始化方法 | 1. 创建Person类, 实例变量:(姓名:_name、年龄:_age) 方法:打招呼:sayHi 实例变量的赋值、取值方法 2. 创建Student类,继承自Person类, 添加实例变量(学号:_num,分数:_score) 方法:指定初始化方法:initWithName:age:num:score: 普通初始化方法:initWithName:Num:score: 便利构造器: studentWithName:num: 重写sayHi方法(打印自己全部实例变量) 实例变量的赋值、取值方法 3. 使用不同的初始化创建Student对象,并发送sayHi消息 | 15min | Lesson-03 |
4. NSString、NSArray、NSNumber | 1.创建Student类 实例变量:_name _age _score 方法:初始化方法 便利构造器 所有实例变量的赋值、取值方法 打招呼sayHi方法(打印自己的全部实例变量) 2. 创建namesArray数组,存放4个姓名 3. 创建agesArray数组,存放4个年龄 4. 创建scoresArray数组,存放4个分数 5. 创建studentsArray可变数组,准备存放学生 6. 使用for循环,从namesArray/agesArray/scoresArray数组中取出值,创建出Student对象,并放入studentsArray数组中 7. 给studentsArray中所有学生发送sayHi消息 | 13min30s | Lesson-04 |
5. 字典、集 | 1. 创建Person类 实例变量:_name _age 方法:初始化方法 便利构造器 打招呼:sayHi 2. 创建3个人对象 3. 创建可变字典,并把学生添加到字典中,key值就是姓名的拼音(例如:姓名是小强,该对象的key就是:’xiaoQiang’) 4. 打印所有人信息 5. 根据key值,删除一个人 6. 再次打印所有所有人信息和人数 | 12min | Lesson-05 |
6. Block、数组高级 | 1. 创建Person类 实例变量: _name _age 方法:初始化方法 遍历构造器 实例变量的赋值、取值方法 2. 创建3个Person对象,放入数组中 3. 在Person中添加compareByName:方法,使用此方法对数组进行排序,并输出 4. 使用Block根据Person的age进行排序,并输出 | 13min30s | Lesson-06 |
7. 类的扩展 | 1. 创建保姆协议 方法:做饭 哄孩子 2. 创建Baby类 实例变量:delegate,遵守协议 方法:饿 hungry 哭 crying 3. 创建Women类,遵守协议,实现方法 4. 在main.m中创建Baby对象和Women对象,实现代理 | 10min | Lesson-07 |
8. 属性 | 1. 创建Student类 属性:name(字符串类型), age(整型),score(浮点类型) 方法:初始化方法 便利构造器 重写description方法(打印学生所有属性值) 2. 创建学生对象 3. 修改学生属性:三种方式(setter方法、点语法、KVC) 4. 输出学生信息 | 9min | Lesson-08 |
9. 内存管理初级 | 1. 创建Student类 属性:name age 方法:初始化方法 便利构造器 2. 遵守协议,实现copy方法 3. 创建一个学生对象,拷贝出一个新学生对象,并打印该学生信息 | 10min30s | Lesson-09 |
10. 内存管理高级 | 1. 创建Student对象 属性:name(语义设置词copy) age(语义设置词assign) address(语义设置词retain) 方法:重写name、age、address的setter和getter方法 初始化方法 便利构造器 重写description方法(打印该对象的信息) 2. 创建Student对象,并打印该对象 | 11min | Lesson-10 |
来自韩俊强的整理,更多精彩请点击关注:http://blog.sina.com.cn/qingnianzhifengwenxue |
欢迎学习本文档,未经博主允许,不得私自转载!
相关文章推荐
- OC语言大总结(上)
- OC语言大总结(下)
- C语言所有作业练习题
- OC语言实现中等难度通讯录
- C语言所有作业练习题
- OC语言实现中等难度通讯录
- C++中 const 的用法
- C++中typename和class的区别
- C语言经典编程282例 明日科技 第243例改错
- Leetcode NO.290 Word Pattern
- C++ 类外定义
- C++ 封装
- C++ String
- c++ 相关的技术资源整理归类
- c++中主要有四种强制转换类型运算…
- WIN C++ API
- C++流格式控制(2006-9-25 15:25:00…
- C/C++代码中的笔误
- C语言中getch()、getche()和getchar()
- 【OJ日志】超级约瑟夫