Xcode基础:Objective-C中的数组详解

Xcode基础:Objective-C中的数组详解


有些时候,你需要使用一系列数据。比如一堆字符串,将每一个串都赋一个变量将是一件很麻烦的事情。当然,Objective-C中,这里有更好的解决方案:数组(array)。一个数组是一组有序的对象列表(更具体的说是一组对象指针的列表)。你可以向数组添加对象,移除对象,或者查看数组的给定位置上存放了哪个对象。你也可以查看数组里包含了几个元素。

我们数数习惯由1开始。在数组中,第一个元素的索引是0,第二个索引是1,以此类推。

本文后面的部分还会有一些例子来说明从0开始计数的作用。

有两个类提供了数组:NSArray和NSMutableArray。带有字符串的数组分为固定数组和可变数组两种。在本章中,我们只体积可变数组。

通过执行下面这个步骤可以创建数组:

[NSMutableArray array]

这个语句会产生一个空数组。但是……请等等,这句代码有些古怪,不是么?实际上,这个例子中我们使用类NSMutalbeArray的名字来说明信息接收方。但是我们希望向类的一个实例发送信息,而不是类本身。

好了,我们又学到了一些新的东西:事实上,在Objective-C语言中,我们可以向类发送信息(原因是类本身也是对象,它是被元类(meta-class)的实例,但本书中不再就此问题做深入探讨)。在Cocoa的说明文件中,能够直接作用于类的方法(类方法)名称前用加号“+”标示,与前面表示减号“-”的实例方法不同(见第8章例[4.5])。在说明文件中我们可以见到对方法array这样的描述:

再回到代码中,下面的程序用于创建一个空的数组,并将三个字符串储存在其中,之后显示数组元素个数。

例[1]

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <foundation foundation.h="">
int main ( int argc, const char * argv[])
{
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     NSMutableArray *myArray = [NSMutableArray array];
     [myArray addObject:@ "first string" ];
     [myArray addObject:@ "second string" ];
     [myArray addObject:@ "third string" ];
     int count = [myArray count];
     NSLog(@ "There are %d elements in my array" , count);
     [pool release];
     return 0;
}</foundation>
运行结果如下:

There are 3 elements in my array

接下来的程序和前面的大体一致,只是最后显示存储在索引0中的的字符串。为此,我们在语句行[2.13]中使用了方法“objectAtIndex:”。

例[2]

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <foundation foundation.h="">
int main ( int argc, const char * argv[])
{
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     NSMutableArray *myArray = [NSMutableArray array];
     [myArray addObject:@ "first string" ];
     [myArray addObject:@ "second string" ];
     [myArray addObject:@ "third string" ];
     NSString *element = [myArray objectAtIndex:0]; // [2.13]
     NSLog(@ "The element at index 0 in the array is: %@" , element);
     [pool release];
     return 0;
}</foundation>
这次的运行结果如下:

The element at index 0 in the array is: first string

你将会经常需要查看数组中的每一个元素以便进行其它操作。为此你可以参照下面例子,使用循环语句按照索引顺序显示数组中的每个元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import <foundation foundation.h="">
int main ( int argc, const char * argv[])
{
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     NSMutableArray *myArray = [NSMutableArray array];
     [myArray addObject:@ "first string" ];
     [myArray addObject:@ "second string" ];
     [myArray addObject:@ "third string" ];
     int i;
     int count;
     for (i = 0, count = [myArray count]; i < count; i = i + 1)
     {
        NSString *element = [myArray objectAtIndex:i];
        NSLog(@ "The element at index %d in the array is: %@" , i, element);
     }
     [pool release];
     return 0;
}</foundation>
运行结果如下:

The element at index 0 in the array is: first string
The element at index 1 in the array is: second string
The element at index 2 in the array is: third string

需要注意的是数组不仅仅可以用于字符串操作。它可以用于任何你希望用数组操作的对象。

类NSArray和类NSMutableArray提供了许多其它方法,希望你能够通过查看说明文件进一步学习与数组操作相关的知识。我们把置换数组内元素这个问题作为本章的结束。置换数组内元素要使用到方法“replaceObjectAtIndex:… withObject:…”。到目前为止,我们见到的方法最多只有一个参数,而这个方法不同,这就是为什么你在这里看到它,它带有两个参数。其实你可以看出来的,因为这个方法带有两个冒号。在Objective-C语言的方法可以使用任意多参数。下面是这个方法的语法:

[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

运行这个方法后,索引1中的对象已经变成了字符串@”Hello”。当然,这个方法只能援引那些有效的索引。换句话说,原来索引中应当有对象,我们才可以用这个方法置换进新的对象。你可能发现了,Objective-C语言的方法的名字好似句子填空。当你要使用一个方法,只要填上你需要的值构成一个有意义的“句子”即可。这种给方法命名的方法来源于Smalltalk(一种由Xerox公司开发的面向对象的系统——译者按),也是Objective-C语言一大特色,它可以大大增强代码的描述性。当创建自己的方法时,你也应当尽量按照这种方法命名,不仅可以提高代码的可读性,而且使你的程序便于维护。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值