在Object C也提供了类似C#中的Array数组对象,在Object C中使用NSArray 来创建数组;但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char,double等基本数据类型。

  一. 不可变数组对象

    这个和之前的NSString有些类似,NSArray 能够创建不可变的数组对象。一旦初始化这个对象就不能动态的修改和增加这个数组。

    (1)使用arrayWithObjects来初始化数组内容,参考如下代码:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];

    上面初始化了一个items数组对象,但是值得注意的是,这段代码会报错,在Object C中数组对象的创建有个特殊的地方,就是最后一个元素必须是nil,这意味着使用nil来标识数组对象的结束。正确的方式如下:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];

    (2)可以使用count方法来获取数组的长度

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
NSLog(@"%d",[items count]);

    以上代码得到的值是2,还是3呢,一般人都会认为是3,但是这个数组的长度是2,上面已经提过了nil只是作为一个结束标识符,并不能代表素组内容。现在修改代码如下:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil];
NSLog(@"%d",[items count]);

    得到的数组长度仍然为2,在第一个nil的位置就已经标识数组结束了,所以后面出现再多的数组元素都没有作用。

    (3)使用objectAtIndex来获取某个索引位置的数组元素

NSLog(@"%@",[items objectAtIndex:]);

    以上代码可以获得素组对象items索引位置为0的元素,但是一定要注意数组的长度,否则数组越界异常。

    (4)使用for来遍历数组元素

for(int i=;i<[items count];i++){
NSLog(@"%@",[items objectAtIndex:i]);
}

    以上代码和我们平时使用遍历数组的方式无异,基本都是这种情况。但是for还有另外一种使用方式,和C#中的foreach使用方式一样。

for(NSObject *item in items){
NSLog(@"%@",item);
}

  

  二. 动态数组

    (1)根据上面所描述的,大致可以猜得出来动态数组类,和NSMutableString比较类似。我们使用NSMutableArray来定义一个动态数组。而且NSMutableArray 还提供了一些方法动态像数组中添加元素,在NSMutableArray不用担心在添加元素的时候发生数组越界的问题,当NSMutableArray长度被占满之后会自动扩容。

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:];

    我们使用arrayWithCapacity来定义一个数组的容量。

    (2)可以使用addObject方法来向对象数组中添加元素,而且NSMutableArray和NSArray不一样,不需要使用nil来介绍标识数组结束。NSMutableArray中同样提供了count 方法来获取数组的长度,这里需要注意的是count和capacity 是不一样的,count是获取的实际长度,而capacity是可存放的长度。

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:];
[mutItems addObject:@"abc"];
[mutItems addObject:@"def"];
NSLog(@"%d",[mutItems count]);

    如果往muItems中继续添加元素,直到超过12个,muItems也不会报错,而且count也会大于12,这也是NSMutableArray的优势所在。

    (3)使用insertObject 在特定的位置添加元素

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:];
[mutItems addObject:@"abc"];
[mutItems addObject:@"def"];
[mutItems addObject:@""];
NSLog(@"%d",[mutItems count]); [mutItems insertObject:@"wang" atIndex:];
for (NSString *item in mutItems) {
NSLog(@"%@",item);
}

案例

    (4)删除数组中的元素

    - (void)removeObject:(id)anObject inRange:(NSRange)range;设置在一定范围内删除,如果在这个范围内没有匹配的元素则什么都不删除。

    - (void)removeObject:(id)anObject;删除指定元素

    - (void)removeObjectsInArray:(NSArray *)otherArray;删除数组中指定的元素

    - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;删除指定索引位置的元素

NSRange range=NSMakeRange(, );
[mutItems removeObject:@"wang" inRange:range];
for (NSString *item in mutItems) {
NSLog(@"----- %@",item);
}

    (5)替换数组元素内容

    - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用这个方法来替换某个索引位置的元素

[mutItems replaceObjectAtIndex: withObject:@"FFFFFFFFFFFFFF"];
for(NSString *item in mutItems){
NSLog(@"************ %@",item);
}

    

  本文只是很初略的记录了学习的一些常用方法,NSArray和NSMutableArray 还提供了大量的其他方法,仍有待继续努力学习和使用!        

Object C学习笔记11-数组的更多相关文章

  1. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  2. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  3. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  4. PHP学习笔记之数组篇

    摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇   一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...

  5. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  6. Object C学习笔记24-关键字总结(转)

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  7. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  8. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  9. Object C学习笔记21-typedef用法

    在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...

  10. Object C学习笔记18-SEL,@ selector,Class,@class

    本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...

随机推荐

  1. NSArray排序方法讲解

    NSArray排序方法讲解 给数组排序有着多种方式 最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sor ...

  2. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间

    第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...

  3. How To create extension in Hybris(创建Hybris的扩展)

    How To create extension in Hybris What is an extension? An extension is an encapsulated piece of the ...

  4. 18年10月30日 NOIP模拟赛

    T1 jkl 题解 显然每次都取a[i]的最大值/最小值,并更新a[i]即可 用数据结构维护这一操作..得分看常数 事实上用v[i]记录权值为i的个数,然后for乱搞就可以了... 其它乱搞做法能获得 ...

  5. 小白学svn

    该博客是本人第一次在自己的电脑中部署svnserver后的一些心得,希望对小白们有所帮助.尽管本人之前有使用svn开发的经验,可是那都是使用百度开发人员平台的,我一直以为在自己的电脑中弄svnserv ...

  6. Raft一致性算法

    所有的分布式系统,都面临的一个问题是多个节点之间的数据共享问题,这个和团队协作的道理是一样的,成员可以分头干活,但总是需要共享一些必须的信息,比如谁是 leader, 都有哪些成员,依赖任务之间的顺序 ...

  7. 笔记--Yarn

    Yarn,Facebook开源一个新的Javascript包管理工具. 简介 Yarn 是一个新的包管理器,用于替代现有的 npm 客户端或者其他兼容 npm 仓库的包管理工具.Yarn 保留了现有工 ...

  8. 对于高并发短连接造成Cannot assign requested address解决方法

    https://www.cnblogs.com/dadonggg/p/8778318.html 感谢这篇文章给予的启发 在tcp四次挥手断开连接时,主动释放连接的一方最后会进入TIME_WAIT状态, ...

  9. 《Java程序设计》第15周课堂实践总结

    <Java程序设计>第15周课堂实践总结 实践一 教材代码检查-p242 要求 在IDEA中或命令行中运行P242 StackTraceDemo2.java 代码运行结果和教材一致吗?为什 ...

  10. nodejs实现mysql数据库的简单例子

    在MySQLWorkbench中创建table存储用户的tokenId信息: use token; SET FOREIGN_KEY_CHECKS = ; DROP TABLE IF EXISTS `a ...