根据OC学习的知识点,总结了一下,希望能帮到大家!
作者:韩俊强   未经允许,请勿转载!

第五节 数组、字典、集合

知识点

注意事项

容器简介

容器类,管理一组对象类型的数据.

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:



第六节 类与对象

知识点

注意事项

数组的遍历

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. NSStringNSArrayNSNumber

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语言大总结(下)的更多相关文章

  1. OC语言大总结(上)

    根据OC学习的知识点,总结了一下,希望能帮到大家! 作者:韩俊强  未经允许,请勿转载! 关注博主:http://weibo.com/hanjunqiang 第一节类于对象   类与对象http:// ...

  2. R语言︱大数据集下运行内存管理

    在实操时出现以下的问题: Error: cannot allocate vector of size 2.9GB 大神指导(http://bbs.pinggu.org/thread-3682816-1 ...

  3. iOS - OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...

  4. OC语言的特性(一)-消息传递与调用函数的表现形式

    我们在初学Objective-C时,都会觉得ObjC中的消息传递和其他语言的调用函数差不多,只是在OC中,方法调用用消息传递这一概念来代替. 那么到底怎样区别OC中的消息传递与其他语言的调用函数呢. ...

  5. OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力. 在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 ...

  6. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  7. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  8. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

  9. OC语言-02-OC语言-基础知识

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

随机推荐

  1. android 小项目------黑名单app

    周一的时候,同事在群里问到了黑名单功能,他说网上都没有找到一个完整的,记得谁说过一句,当都没有做过的时候,这就是机会.这几天公司事比较多,只能晚上抽时间写写,直到今天才完整的做出来. 具体效果的话大家 ...

  2. 虚拟机克隆,并设置新的ip

    6.1克隆新的虚拟机 选中某个虚拟机-à右键à管理à克隆 选择下一步 选择下一步 点击完成 6.2修改主机名 [root@hadoop3 ~]# vim/etc/sysconfig/network 将 ...

  3. 临时关闭Mac SIP系统完整性保护机制

    # 修正更新 [2016-12-27] 晚上给我笔记本安装的时候,使用user权限安装成功,mac最后是关闭sip才安装成功. $ pip install -r requirements.txt -- ...

  4. Android makefile编写基础

    首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来: LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_M ...

  5. Activiti 流程部署方式 activi 动态部署(高级源码篇)

    Activiti的流程 部署方式有很多种方式,我们可以根据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结详细介绍了使用场景. 下面看一下部署方 ...

  6. XMPP(二)-基于asmack+openfire的安卓客户端(仿QQ)的介绍以及个人心得

    关于XMPP第一篇-openfire的搭建写完后,就一直在赶本篇所要介绍的这个基于asmack+openfire的安卓客户端,费了不少精力,因为有不少同学在还在焦急的等待着(自恋了呵呵),所以紧赶慢赶 ...

  7. maven的UnsupportedClassVersionError

    问题描述 我安装了maven3.3.3,配置好了M2_HOME和path环境变量之后,执行mvn -v报错:java.lang.UnsupportedClassVersionError: -. : U ...

  8. Java继承时的初始化顺序

    Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insec ...

  9. JDBC-数据库的更新操作编程(三)

    首先建立一个静态方法,代码如下: public static Statement getStatement(){ Statement st = null; try { Class.forName(&q ...

  10. Android缩放动画

    Android缩放动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...