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 得到数据对象。

[arr   arrayWithObjects: ...]; 向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。
 
NSArray 不可变数组 常用方法
+(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:..] :向可变数组尾部添加一个数组对象。

 
NSMutableArray 常用方法总结
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的常用方法及相互转换的更多相关文章

  1. 数组类型转换失败:NSMutableArray和NSArray的相互转换

    1.数组类型转换无效(错误) @property(strong, nonatomic) NSMutableArray *temp_Array; _temp_Array=(NSMutableArray ...

  2. [bugfix]copy属性参数将NSMutableArray变为NSArray类型

    问题:NSMutableArray 声明为 copy 属性参数后即使接受NSMutableArray变量依然为NSArray变量 测试: 属性申明为: 1 @property (nonatomic, ...

  3. NSDictionary或NSArray与JSON字符串相互转换

    在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类.通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. 以前,我记得我用的是 ...

  4. iOS开发基础:OC数组对象NSArray的常用方法

    本文介绍了OC的数组对象的基本方法的使用: 因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作. 其中Person.h中的代码为: [objc] v ...

  5. NSArray和NSMutableArray相互转换, 以及常用方法-备

    有时候项目中NSArray和NSMutableArray需要相互转化,下面给出相关代码1.NSArray 1.1 转化:NSMutableArray 1 NSMutableArray *mutable ...

  6. NSArray,NSMutableArray的一些常用方法

    不可变数组 ——NSArray 常用的初始化一个数组:       NSArray *array1 = [[NSArray alloc] init];       NSArray *array2 = ...

  7. NSArray 跟 NSMutableArray 使用 区别

    NSArray 可变数组 一.NSArray是静态数组,创建后数组内容及长度不能再修改. 实例: //用arrayWithObjects初始化一个不可变的数组对象. //初始化的值之间使用逗号分开,以 ...

  8. Objective-C学习篇07—NSArray与NSMutableArray

    大纲 NSArray NSMutableArray 快速枚举 NSArray NSArray是一个静态数组,也就是一个不可变数组,一旦创建以后,就不能进行添加,删除或者修改其中的元素.NSArray继 ...

  9. (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...

随机推荐

  1. Java-----思想认识

    1.1 Java封装性思想的初步理解 从项目需求的角度出发,建立各个模块化的类,各个模块暂时不需要具体的方法描述,只需要各个模块的理想到位. 以银行项目为例.初步设想需要三个模块:银行(Bank类). ...

  2. @media print样式 关于table断页

    <html> <head> <style> @media print { table { page-break-after:auto } tr { page-bre ...

  3. Redis学习笔记1 -- 单机环境时分布式锁的使用

    使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKee ...

  4. spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异

    为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...

  5. 第8章 CSS3中的变形与动画(上)

    变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中心顺时 ...

  6. css以前忽略的一些知识点(知识体系搭建)

    一.选择器 基本选择器: 通用元素选择器 标签选择器 类选择器 id选择器 组合选择器: 多元素组合选择器 后代元素选择器 子代元素选择器 毗邻元素选择器 属性选择器: [title] & P ...

  7. MVC4.0 oracle 找不到请求的 .Net Framework Data Provider。可能没有安装.

    oracle 11G, MVC4.0 项目,因刚重装系统,重新安装的VS2010, ORACLE 11G 运行项目,后报错 找不到请求的 .Net Framework Data Provider.可能 ...

  8. Angular-ui/bootstarp modal 主控制器与模态框控制器传值

    调用模态框: $scope.open = function (size) { //这里很关键,是打开模态框的过程 var modalInstance = $uibModal.open({ animat ...

  9. C# 使用Guid类生成不重复的随机数

    什么是Guid GUID(全局唯一标识符)         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID ...

  10. 常量、变量、数据类型 搞错N+1次 累死

    public class hello { /** * * * * * @param args */ public static void main(String[] args) { String _$ ...