知识点

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语言 (四)数组的更多相关文章

  1. iOS开发-OC语言 (一)oc数据类型

    分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...

  2. iOS开发-OC语言 (三)字符串

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...

  3. iOS开发-OC语言 (七)继承、多态、类别

    继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...

  4. iOS开发-OC语言 (五)字典

    字典 主要知识点: 1.NSDictionary 类 2.NSMutableDictionary 类 3.了解NSMutableDictionary 与 NSDictionary 的继承关系 4.补充 ...

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

  6. iOS开发-OC语言 (六)点语法和@property

    点语法和@property 知识点 1.setter/getter函数 2.点语法 3.@property语法和属性 ======================================== ...

  7. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  8. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

  9. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

随机推荐

  1. ASP.NET中XML转JSON的方法

    原文:ASP.NET中XML转JSON的方法 许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理.要实现这一点,它们必须将XML格式转换为JSON格式. X ...

  2. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  3. jquery-制作选项卡

    强大的jquery-制作选项卡   最近在学习jquery,特地把今天写的一个选项卡源码贴出来.只是做只是梳理,大神们请不要吐槽,如果有更好的方法,欢迎指点.谢谢. css <style> ...

  4. jQueryRotate 转盘抽奖代码实现

    代码如下: 例子兼容IE6,7,8 以及高版本浏览器,如有bug请回复! 1.html结构 <!doctype html> <html lang="en"> ...

  5. javascript this指针指向?

    前言 理解javascript的指针就需要先了解js的执行环境和作用域!执行环境的定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有的变 ...

  6. css-缩写

    border缩写 /*缩写前*/ element{ border-top-width:1px; border-top-style:solid; border-top-color:#cccccc; } ...

  7. tsung 对 openfire 压力测试

    tsung 对 openfire 压力测试   1. 参考 http://blog.csdn.net/foxisme2/article/details/7521139 http://blog.csdn ...

  8. 使用javaservice 将jboss 注册为服务

    近来做项目,需要jboss定期重新启动.不想再看到jboss启动那个黑洞洞的窗口,就想着把它注册为服务,然后在net start.恰好objectweb上有个open source的javaservi ...

  9. 基于Jquery 简单实用的弹出提示框

    基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...

  10. DIP、IoC、DI以及IoC容器

    深入理解DIP.IoC.DI以及IoC容器 摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.D ...