NSMutableArray和NSArray的常用方法及相互转换
NSMutableArray和NSArray的常用方法及相互转换
// NSArray --> NSMutableArray
NSMutableArray *myMutableArray = [myArray mutableCopy];
NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:myArray]; // NSMutableArray --> NSArray
NSArray *myArray = [myMutableArray copy];
NSArray *myArray = [NSArray arrayWithArray: myMutableArray];
NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。
[arr count]; 得到这个对象数组的长度。
[arr objectAtIndex: ...]; 传入数组脚标的id 得到数据对象。
| +(id)arrayWithObjects:obj1,obj2,...nil | 创建一个新的数组,obj1,obj2......是他的元素对象,以nil对象结尾 |
| -(BOOL)containsObject:obj | 确定数组中是否包含对象obj |
| -(NSUInteger)count | 返回数组元素个数 |
| -(NSUInteger)indexOfObject:obj | 第一个包含obj元素的索引号 |
| -(id)objectAtIndex;i | 返回存储在位置 i 的对象 |
| -(void)makeObjectsPerformSelector:(SEL)selector | 将 selector 只是的消息发送给数组中的每个元素 |
| -(NSArray*)sortedArrayUsingSelector:(SEL)selector | 根据selector 指示的比较方法对数组进行排序 |
| -(BOOL)writeToFile:path atomically:(BOOL)flag | 将数组写入指定的文件中,如果 flag 为 YES,则需要先创建一个临时文件 |
可变数组对象:
NSMutableArray 是 NSArray 补充类。NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素。也许你会看到 arrayWithCapacity 方法,这个数组容量仅仅是一个参考,不会真的限制数组的大小。 是为代码优化而设计的。
[NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
[array addObject:...] : 向可变数组尾部添加数据对象。
[array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。
| array | 创建一个空数组 |
| +(id)arrayWithCapacity:size | 创建一个数组,指定容量为size |
| -(id)initWithCapacity:size | 初始化一个新分配的数组,指定容量为size |
| -(void)addObject:obj | 将对象obj添加到数组末尾 |
| -(void)insertObject:obj atIndex:i | 将对象 obj 插入到索引为 i 的位置 |
| -(void)replaceObject:obj atIndex:i | 将数组中索引为 i 处的元素用obj 置换 |
| -(void)removeObject:obj | 从数组中删除所有是 obj 的对象 |
| -(void)removeObjectAtIndex:i | 从数组中删除索引为 i 的对像 |
| -(void)sortUsingSelector:(SEL)selector | 用 selector 只是的比较方法将数组排序 |
在iOS 开发过程中, NSArray,NSMutableArray、NSDictionary、 NSMutableDictionary 经常被用到。这里先来介绍NSArray 与 NSMutableArray。
首先,NSArray只能存储Objective-C 对象,而不能存储C语言中的基本数据类型,比如:int,flot,指针等。 在使用NSArray时,需特别注意,必须以nil 结尾。以此来代表结束。 举例如下:
NSArray 通过类方法 arrayWithObjects 创建一个新的NSArray。
NSArray * array= [ NSArray arraryWithObjects: @"one", @"two", @"three",nil ] ;
为了查看array 的内容, 可通过NSLog方法,如下:
for(int i=0; i<[array count]; i++ )
{
NSLog (@"index %d has %@", i, [array objectAtIndex:i]);
}
从中可看出, NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。
NSMutableArray 是 NSArray 补充类。NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素。
也行你会看到 arrayWithCapacity 方法,这个数组容量仅仅是一个参考,不会真的限制数组的大小。 是为代码优化而设计的。
NSMutableArray 使用 addObject: 在末尾添加对象, 用 removeObjectAtIndex: 来删除指定索引处的对象。对象删除后,被删除对象后面的数组元素被迁移,填补空缺。
这里需特别注意的是:NSArray 的初始化必须以 nil 结束。 如果忘记了,编译器会报错:Missing sentinel in method dispatch.
另外还需注意,在字符串前加 @ ,这是 数组在 Objective-C 与 C 的区别。
如何访问获取 NSArray 中的对象呢? 通过 NSArray的 objectAtIndex: 方法。 改写如下:
NSArray 的初始化有 两种方法:
(1) NSArray *array = [[NSArray alloc]initWithObjects: @"red", @"white",@"blue",nil]; // 不要忘记 最后补填 nil
(2) NSArray *array =@[@"red", @"white",@"blue"]; // 这种方法更为简洁些
NSLog(@"array[0]=%@" , [array objectAtIndex:0]) ;
输出结果是:array[0]=red
同理,通过 NSArray的 insertObjectAtIndex:可以很方便地将已有的对象插入数组中的指定位置。
小结:
NSArray 其实是很容易理解的。 从本质上讲,NSArray 就是一个存放对象的容器。 NSArray 是静态的对象数组,一旦创建后,就不能再添加和删除对象。 如果你想添加或删除,当然是有办法的,而且还很简单,那就是用 NSMutalbeArray 啊。
NSMutableArray和NSArray的常用方法及相互转换的更多相关文章
- 数组类型转换失败:NSMutableArray和NSArray的相互转换
1.数组类型转换无效(错误) @property(strong, nonatomic) NSMutableArray *temp_Array; _temp_Array=(NSMutableArray ...
- [bugfix]copy属性参数将NSMutableArray变为NSArray类型
问题:NSMutableArray 声明为 copy 属性参数后即使接受NSMutableArray变量依然为NSArray变量 测试: 属性申明为: 1 @property (nonatomic, ...
- NSDictionary或NSArray与JSON字符串相互转换
在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类.通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. 以前,我记得我用的是 ...
- iOS开发基础:OC数组对象NSArray的常用方法
本文介绍了OC的数组对象的基本方法的使用: 因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作. 其中Person.h中的代码为: [objc] v ...
- NSArray和NSMutableArray相互转换, 以及常用方法-备
有时候项目中NSArray和NSMutableArray需要相互转化,下面给出相关代码1.NSArray 1.1 转化:NSMutableArray 1 NSMutableArray *mutable ...
- NSArray,NSMutableArray的一些常用方法
不可变数组 ——NSArray 常用的初始化一个数组: NSArray *array1 = [[NSArray alloc] init]; NSArray *array2 = ...
- NSArray 跟 NSMutableArray 使用 区别
NSArray 可变数组 一.NSArray是静态数组,创建后数组内容及长度不能再修改. 实例: //用arrayWithObjects初始化一个不可变的数组对象. //初始化的值之间使用逗号分开,以 ...
- Objective-C学习篇07—NSArray与NSMutableArray
大纲 NSArray NSMutableArray 快速枚举 NSArray NSArray是一个静态数组,也就是一个不可变数组,一旦创建以后,就不能进行添加,删除或者修改其中的元素.NSArray继 ...
- (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...
随机推荐
- node.js内存缓存的性能情况
1. WEB 服务性能测试和优化 1.1 测试环境搭建 网络环境:内网 压力测试服务器: 服务器系统:Linux 2.6.18 服务器配置:Intel® Xeon™ CPU 3.40GHz 4 C ...
- ueditor PHP版本使用方法
1.ueditor是百度很好用的一款文本编辑器,第一次使用,在此记录使用方法. 2.从http://ueditor.baidu.com/website/download.html#ueditor下载e ...
- Hibernate Annotation (Hibernate 注解)
简介: 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载. 然而现在借助新的 Hibernate Annotation 库, ...
- javascript时间格式转换(今天,昨天,前天)
function transDate() { var $time =document.getElementById("share-time"); var date = $time. ...
- Python基础-列表生成式和生成器表达式
一.列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list ...
- VC编程操作word2010生成表格
作者:朱金灿 来源:http://blog.csdn.net/clever101 一. 右键单击工程节点,然后选择添加类,如下图: 二. 添加TypeLib中的MFC类,如下图: 三. 选 ...
- SSIS 使用OLEDB/ADO NET Source 数据流source控件 连接Oracle失败
在做数据提取的时候发现一个非常奇怪的问题. Oracle客户端是安装正确并且Toad可以正常运行的,但是在新建OLEDB/ADO NET Source 数据流source控件连接Oracle的时候一直 ...
- spring-springmvc code-based
idea设置maven在下载依赖的同时把对应的源码下载过来.图0: 1 主要实现零配置来完成springMVC环境搭建,当然现在有了springBoot也是零配置,但是很多同仁都是从spring3.x ...
- 一张图看懂CSS cascade, specific, importance, inheritance
http://www.w3.org/TR/CSS21/cascade.html#inheritance http://www.w3.org/TR/CSS21/cascade.html#cascade ...
- 线程 Z
原文:http://www.albahari.com/threading/part5.aspx 专题:C#中的多线程 1并行编程Permalink 在这一部分,我们讨论 Framework 4.0 加 ...