iOS开发-OC语言 (四)数组
知识点
1.NSArray
2.NSMutableArray
1.数组的基本用法;
2.数组的遍历
3.数组排序
=========== NSArray 不可变数组 =================
1、OC数组和c数组的区别
C语言的数组:
相同类型变量的有序结合。 类型:可以是简答数据类型、构造数据类型
int a[10];
int *b[10];
1)NSArray是一个对象,是任意类型对象地址的集合
不能存放简单的数据类型(int, float, NSInteger…)
除非通过一些手段把简单数据类型变成对象。
2)C数组可以保存任意类型的数据
3)NSArray下标越界不会有警告,但是运行会直接报错
2、如何创建一个空数组
NSArray *array = [[NSArray alloc] init];
array = [NSArray array];
3. 通过指定对象创建数组
//只有一个元素
array = [NSArray arrayWithObject:@"aaa"];
//有n个元素
array = [NSArray arrayWithObjects:@"1111",@"2222",@"333", nil];
4.通过指定数组创建数组(两个数组内容的一样)
[NSArray arrayWithArray:数组];
5.通过简单的方式创建数组
array = @[];//空数组
array = @[@"111",@"222",@"333"];//3个元素
6.把数组中所有的元素转化为字符串
[array componentsJoinedByString:@“两个元素之间添加的字符串”];
7.获取数组元素个数
[array count]
8.通过索引获取相应的元素(下标要小于数组的count)
[array objectAtIndex:下标];
简单取值:array[下标]
9.通过对象获取在数组中的索引(通过元素获取下标)
[array indexOfObject:要找的元素]
10.取出数组的最后一个元素或者第一个元素
//取第一个元素
[array firstObject];
//取最后一个
[array lastObject];
11.判断数组中数组包含某个元素
[array containsObject:要查找的对象]
12.如何取出数组中的一部分元素
//索引的集合,保存索引的,NSIndexSet是一个集合类(索引的集合),但是集合里面不能有重复索引
- //只初始化一个索引
- NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:];
- //下标为1,长度为2
- NSRange range = NSMakeRange(, );
- //构造一个范围的索引
- indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
- [array objectsAtIndexes:indexSet]
13.判断NSArray中存储的对象是否为指定类型的对象
/*
[A isKindOfClass:B],判断A类是否是B的子类或者本类。
[A isMemberOfClass:B],判断A类是否是B类(不包括子类)
*/
14.判断两个数组内容是否相同(与顺序有关)
NSArray *arr1 = @[@"111",@"222",@"333"];
NSArray *arr2 = @[@"111",@"333",@"222"];
if ([arr1 isEqualToArray:arr2])
{
NSLog(@"内容完全相等");
}
else
{
NSLog(@"内容不完全相等");
}
15.把数组写入文件中(数组里面是:NSString,int,float,double......)
[array writeToFile:path atomically:YES]
16.从文件中读取数组
[NSArray arrayWithContentsOfFile:path]
17.基本类型的包装类
NSNumber
//把int类型包装成对象
numberWithInt
18.截取数组中指定范围的元素
[array subarrayWithRange:要截取的范围]
============= NSArray数组的遍历 ===========
1.通过下标遍历数组
for (int i = 0 ; i < [array count]; i++)
{
NSLog(@"%@",array[i]);
}
2、NSEnumerator 枚举器
1)objectEnumerator消息
作用:正序输出所有元素
NSEnumerator *enumerator = [array objectEnumerator];
2)reverseObjectEnumerator消息
作用:逆序输出所有元素
enumerator = [array reverseObjectEnumerator];
//取下一个元素
[enumerator nextObject]
3.快速枚举法(for in)
for (类型 *变量 in 数组)
4.block方法遍历
========= NSMutableArray可变数组 =============
1.思考:为什么需要有NSMutableArray
2.NSMutableArray的作用
3.如何创建一个NSMutableArray
1)创建空数组
<1>NSMutableArray *array = [[NSMutableArray alloc] init];
<2>array = [NSMutableArray array];
2)创建有对象的数组
《1》初始化只能有一个对象
NSMutableArray arrayWithObject:@"111"];
《2》初始化只能有多个对象
[NSMutableArray arrayWithObjects:@"1111",@"222",@"333",@"4444", nil];
[[NSMutableArray alloc] initWithObjects:<#(id), ...#>, nil];
4.可变数组添加元素
1)向可变数组里面添加元素(在最后添加)
[array addObject:元素];
2)如何向可变数组中插入一个元素
/*
添加一个元素
*/
//在下标为0的位置添加333
[array insertObject:@"333" atIndex:0];
3)如何向可变数组中插入多个元素
- /*添加多个元素*/
- //要添加的元素
- NSArray *insertArray = @[@"",@""];
- //要添加的索引
- NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(, [insertArray count])];
- /*注意:要添加元素数组的个数等于索引集合的个数,否则crash*/
- [array insertObjects:insertArray atIndexes:indexSet];
5.根据数组下标取值
[array objectAtIndex:下标];
6、如何删除元素
1)删除指定索引的元素
[array removeObjectAtIndex:下标];
2) 删除最后一个元素
[array removeLastObject];
3)根据指定对象来删除元素
[array removeObject:对象];
4)删除所有元素
[array removeAllObjects];
5)一次性删除所有指定下标的元素
[array removeObjectsAtIndexes:索引集合];
6) 删除指定范围内的元素
[array removeObjectsInRange:<#(NSRange)#>];
6.替换元素
- //根据下标替换元素
- [array replaceObjectAtIndex: withObject:@"xiaoming"];
- //根据下标集合替换元素(多个元素替换)
- [array replaceObjectsAtIndexes:<#(NSIndexSet *)#> withObjects:<#(NSArray *)#>];
- //当前指定范围的下标替换为指定数组中的元素
- [array replaceObjectsInRange:<#(NSRange)#> withObjectsFromArray:<#(NSArray *)#>];
7.交换两个元素
/*下标与下标进行交换*/
[array exchangeObjectAtIndex:交换的下标 withObjectAtIndex:交换的下标];
======== 数组排序 ============
8、数组排序
1)数组排序方法
sortedArrayXXX函数
作用:通过返回值将排序结果告诉用户,{不会修改数组中的元素}
适用于不能修改的数组
sortUsingXXX函数
作用:直接对数组内的元素进行排序,{最后结果保存在要排序的数组中}
适用于可被修改的数组
2)使用block排序
什么是block:类似于c语言中的函数指针
block的好处:可以访问函数中的局部变量
!!!定义一个block语法!!!
block如何修改函数中的局部变量
__block关键字,是block语法特有的关键字 相当于将变量变成全局变量
其它说明:
函数指针是指向函数的指针变量,即本质是一个指针变量。
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数名)(参数)
3) NSSortDescriptor高级排序
====== 其他 ==============
selector选择器使用
1.SEL数据类型
1)什么是
Objective-C在SEL编译的时候,会根据方法的名字(包括参数序列),
生成一个用 来区分这个方法的唯一的一个ID,这个ID就是SEL类型的
还可以这样理解:
SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法。在内存中每个类的方法都存储在类对象中,每个方法都有一个与之对应的SEL类型的数据,根据一个SEL数据就可以找到对应的方法地址,进而调用方法。
方法的存储位置:
- 在内存中每个类的方法都存储在类对象中
- 每个方法都有一个与之对应的SEL类型的数据
- 根据一个SEL数据就可以找到对应的方法地址,进而调用方法
2)作用:
从效率的角度上来说,执行的时候不是通过方法名字而是方法ID也就是一个整数来查找方法,
由于整数的查找和匹配比字符串要快得多,所以这样可以在某种程度上提高执行的效率
并且增强程序的灵活性
3)使用方法
通过@selector方法获取
SEL s1 = @selector(compare:);
通过NSSelectorFromString将一个字符串转换为一个SEL类型
SEL s2 = NSSelectorFromString(@"compare:");
2.performSelector
1)作用:执行SEL
2)使用@selector排序
SEL 是oc特有的类型 compare: @selector(compare:)
一个方法名对应一个编号
只要方法名相同,那么它的SEL值就相同
ios会将方法名(函数名)转化为一个唯一编号 编号就是SEL类型
系统通过识别SEL 去寻找对应的方法名
@selector :方法选择器
@selector(xxx) xxx就是方法名
iOS开发-OC语言 (四)数组的更多相关文章
- iOS开发-OC语言 (一)oc数据类型
分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...
- iOS开发-OC语言 (三)字符串
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...
- iOS开发-OC语言 (七)继承、多态、类别
继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...
- iOS开发-OC语言 (五)字典
字典 主要知识点: 1.NSDictionary 类 2.NSMutableDictionary 类 3.了解NSMutableDictionary 与 NSDictionary 的继承关系 4.补充 ...
- iOS开发-OC语言 (二)类的设计
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...
- iOS开发-OC语言 (六)点语法和@property
点语法和@property 知识点 1.setter/getter函数 2.点语法 3.@property语法和属性 ======================================== ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
随机推荐
- web后端server优化
1,1. 就不需要优化一个页面模板,这些都是一些非常成熟的技术,甚至没有打招呼easy了10%的性能.这10%在整个页面的运行过程中仅仅占了0.5%的比例.微乎其微,等于是前面样例中的4车道变8车道的 ...
- WebIM(4)----Comet的特殊之处
WebIM系列文章 在一步一步打造WebIM(1)一文中已经使用Comet实现了一个简单的WebIM,那么,Comet究竟和一般的打开网页有何区别,本文将通过编写一个简单的HTTP服务器来说明两者的区 ...
- WinForm中回车键实现文本框之间的跳转
利用窗体的KeyPreView .设置KeyPreView = true 设置窗体的KeyPreView 属性为True后,那么窗体内的子控件响应KeyPress事件(或其他事件)之前,会先响应窗体的 ...
- c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程
定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法.用SqlParameter[]代替存储过程需要的参数.这样就不用为每一个存储过程写一个方法了 1.首先定义一个ExcuteProc ...
- 【分享】SAS统计分析软件学习教程电子书合集下载
SAS是著名的统计分析软件,全称为Statistics Analysis System,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于1976年成立了SAS软件研究所,正式推出了SAS软件. 转 ...
- 写入与导出excel
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问. (异常来自 HRE ...
- Push Notification总结系列(一)
Notification系列概括: 1.Push Notification简介和证书说明及生成配置 2.Push Notification的iOS处理代码和Provider详解 3.Push Noti ...
- Sql Server实现多行数据按分组用逗号分隔成一行数据
例如,要将下面的数据 以GROUP_ID进行分组,一组一行,一组中的多个PRODUCT_ID用逗号分隔,select 出来成如下结果: 在Sql Server中,我目前想到的一种方法是写一个函数,如下 ...
- Hive中Bucket的应用
网友南京-李先森给了他收集的一些资料,如下: Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件.如将 user 列分散至 32 个 ...
- SQLSERVER清空(Truncate)被外键引用的数据表
前言:我们知道SQLSERVER清空数据表有两种方式Delete和Truncate,当然两者的不同大家也都知道(不清楚的可以MSDN).不过这个错误“Cannot truncate table be ...