Objective-C中除了可以使用C中的基本数组外,如int[5],char word[] ={‘a’,'b’,'c’};Foundation还提供了NSArray类.Foundation是有序的对象集合.NSArray保存的对象可以是 不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。例如下面的代码在运行时会报错:

NSArray *arrs = [[NSArray alloc]initWithObjects:@”abc”,@”123″,456,nil];

就 像NSString和NSMutableString一样,同样也存在可变数组和不可变数组.不可变数组是由NSArray类处理的,而可变数组则是由 NSMutableArrray处理的.后者是前者的子类,也就是说NSMutableArrray继承了NSArray的方法.

NSArray 不可变数组

使用NSArray关键字创建一个不可变的数组,一旦初始化完毕后这个数组的元素是不可以在动态的添加与删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
intmain(intargc,constchar*argv[])
{
 
    @autoreleasepool{
 
        //创建一个包含星期的数组
        NSArray*days=[NSArray arrayWithObjects:@"SUN",@"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT",nil];
 
        //获取数组所包含对象个数
        NSLog(@"size of days:%ld",(unsignedlong)[days count]);  //size of days:7
 
        //循环打印数组中的元素
        for(inti=0;i<[days count];i++){
            NSLog(@"%@",[days objectAtIndex:i]);
        }
 
        //另一种方法打印数组中的元素
        for(idday indays){
            NSLog(@"%@",day);
        }
 
    }
 
    return0;
}

NSArray的类方法arrayWithObjects:使用一列对象作为元素创建数组,这种情况下需要按顺序列出对象并使用逗号隔开.将这个数组的最后一个值指定为nil,标记参数数组的结束.它实际上并不会存储在数组中.

[array count] : 得到这个数组对象的长度。
[array objectAtIndex index]: 传入数组的索引(index) 得到数据对象。
[arrayWithObjects: ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil,以标志结束.

上面我们使用了两种方法遍历数组中的元素,第一种方式比较普遍,但是效率不好 ,推荐使用第二种方式.

+(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,则需要先创建一个临时文件
MSMutableArray可变数组

大多时候我们需要动态的增加和删除数组中的元素,这就需要使用MSMutableArray.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
intmain(intargc,constchar*argv[])
{
 
    @autoreleasepool{
 
       //创建一个空数组
       NSMutableArray*arrs=[NSMutableArrayarray];
 
        //C中的一些基本元素我们可以用NSNumber类来包装,类似java中的装箱,另外还有一些struct类型的数据我们也可以用NSNumber类的父类NSValue来进行包装,包装成NSValue的对象再将其放入数组中。
        intage=23;
        charc='a';
        floatf=3.1415926;
        NSRectrect=NSMakeRect(1,2,3,4);
 
        NSNumber*objAge=[NSNumber numberWithInt:age];
        NSNumber*objC=[NSNumber numberWithChar:c];
        NSNumber*objF=[NSNumber numberWithFloat:f];
        NSValue*objRect=[NSValue valueWithRect:rect];
 
        [arrs addObject:objAge];
        [arrs addObject:objC];
        [arrs addObject:objF];
        [arrs addObject:objRect];
 
        //如果要添加空的话可以用以下方法
        [arrs addObject:[NSNullnull]];
 
        NSLog(@"Size of arrs: %li",(unsignedlong)[arrs count]);//Size of arrs: 5
        NSLog(@"%@",arrs);
 
        //创建一个指定初始容量的数组
        NSMutableArray*arrs2=[NSMutableArray arrayWithCapacity:3];
 
        //指定初始容量为3,但我们添加了5个对象
        [arrs2 addObject:@"obj1"];
        [arrs2 addObject:@"obj2"];
        [arrs2 addObject:@"obj3"];
        [arrs2 addObject:@"obj4"];
        [arrs2 addObject:@"obj5"];
 
        //将对象 obj 插入到索引为 i 的位置
        [arrs2 insertObject:@"obj" atIndex:0];
 
        //删除指定索引处的对象
        [arrs2 removeObjectAtIndex:3];
 
        //遍历数组
        for(idobj inarrs2){
            NSLog(@"%@",obj);    //obj,obj1,obj2,obj4,obj5
        }
 
        //合并字符串数组
        NSString*str=[arrs2 componentsJoinedByString:@"|"];
        NSLog(@"%@",str);  //obj|obj1|obj2|obj4|obj5
 
        //字符串切割成数组
        NSArray*arr3=[str componentsSeparatedByString:@"|"];
        NSLog(@"%@",arr3);
 
    }
 
    return0;
}

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 只是的比较方法将数组排序
Objective-C的新特性之Object Literals

在
苹果WWDC2012大会上介绍了大量Objective-C的新特性,其中有一点就是Object
Literals,它允许你方便地定义数字、数组和字典对象。这个功能类似于java5提供的auto
boxing功能。这虽然是一个语法糖,但对提高写代码效率帮助很大。

更多关于Objective-C的新特性请查看:Objective-C新特性.

为了方便你的旧代码迁移到新的写法,xcode专门还提供了转换工具,在Xcode中,选择 Edit -> Refactor -> Convert to Modern Objective-C Syntax即可。如下所示:

然后就会自动帮我们转换成新的语法:

数组对象(NSArray和NSMutableArrray)的更多相关文章

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

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

  2. Objective-C( Foundation框架 一 数组(NSArray))

    OC数组 NSArray是静态的数组,就是它所指向的内容是不可改变的,它指向一段内存区域,一旦初始化,不能通过它对该内存区域的数据进行修改操作,但是它可以读数据. NSMutableArray是动态的 ...

  3. Objective-c 数组对象

    首先我们必须知道数组的概念:数组是有序的对象集合,一般情况下,一个数组的对象都是相同类型的.数组当中也存在可变数组和不可变数组. 1. 不可变数组 (NSArray) 可变数组 NSMutable 是 ...

  4. ios 把数组对象转成json字符串存起来

    1第一步是我们获取数据源 一般我们都是从接口请求数据 NSArray *subColumnsArray = nil; NSDictionary *dict = [NSJSONSerialization ...

  5. 了解JavaScript 数组对象及其方法

    数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的 ...

  6. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  7. java数组对象的浅层复制与深层复制

    实际上,java中数组对象的浅层复制只是复制了对象的引用(参考),而深层复制的才是对象所代表的值.

  8. MongoDB学习笔记~官方驱动嵌套数组对象的更新

    回到目录 对于数组对象mongodb本身是支持的,不过对于数组的更新,mongodb的Csharp驱动目前只支持一级,即你的对象里包含数组,而数组又包括数组,这表示两层,这在更新子数组时,Csharp ...

  9. jquery解析php通过ajax传过来的json二维数组对象

    ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>arra ...

随机推荐

  1. HBase0.94.2-cdh4.2.0需求评估测试报告1.0之一

    hbase是bigtable的开源山寨版本.是建立的hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写的数据库系统.它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的r ...

  2. CodeForces 543D 树形DP Road Improvement

    题意: 有一颗树,每条边是好边或者是坏边,对于一个节点为x,如果任意一个点到x的路径上的坏边不超过1条,那么这样的方案是合法的,求所有合法的方案数. 对于n个所有可能的x,输出n个答案. 分析: 题解 ...

  3. 编程哲学之 C# 篇:007——如何创造万物

    上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...

  4. MMM的一周计划 准备公告

    (19.6.17——19.6.22) 目前本周还没有过去所以还会更新 第0周 目前博客更新暂定于 [题目难度颜色见洛谷] 1.绿题以上绝对更新 2.黄题可能更新 3.其他估计不会有更新 准备工作 1. ...

  5. 提交AppStore被拒原因总结

    (1)Information Needed We began the review of your app but aren’t able to continue because we need ad ...

  6. SQL 与或运算

    如果一个字段需要同时包含多个信息点, 最佳的方法是进行位运算,如:1,2,4,8,16 根据与运算进行判断,如一个字段为7,判断2是否存在, 7&2 = 2为ture时,表示存在,反之亦然, ...

  7. php preg_replace去除html xml 注释

    php preg_replace去除html xml 注释 //不确定是否最优 $content = preg_replace('/<!--((?!-->).)*-->/s', '' ...

  8. C遇到的编译错误整理

    1: Permission denied collect2.exe: error: ld returned exit status c:/mingw/bin/../lib/gcc/mingw32/6. ...

  9. npm link & run npm script

    npm link & run npm script https://blog.csdn.net/juhaotian/article/details/78672390 npm link命令可以将 ...

  10. Welcome-to-Swift-24高级运算符(Advanced Operators)

    除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算. 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的.溢出行为会 ...