标签:
---恢复内容开始---
Foundation框架有丰富的集合类型:数组、组(sets)、字典以及他们各自的可变类型;集合主要是以数组、组合字典的形式来管理一系列的对象。
注意:
集合类对他自己内部所包含的对象是一种强引用的关系,换句话说,如果你将一个对象存放在数组当中,就意味着这个对象会一直占用内存,除非你讲这个数组销毁。
集合拥有一些属性,大多数集合只会存储对象,并且拥有可变和不可变版本。
所有的集合类型都由一些共通的方法,如:
遍历集合中的所有对象
判断一个对象是否被集合所包含
访问集合中的一个独立的对象个体
但是可变集合会有一些独特的方法,如:
像集合中添加对象
从集合中移除对象
虽然集合类有许多共通的属性,但是仍然存在两个很大的不同点。就是结果你会发现,总会有某个集合类会比其他的更适合某个任务。一个集合最终表现怎么样取决于怎么样去使用它,只有选择适合某个特殊任务的集合,才会使集合发挥较好的性能。
数组
数组里存放的对象都是有序的,并且一个数组中可以包含重复的对象(也就是说一个对象实例可以在一个数组中出现好几次)。数组中可以包含一些猫啊。狗啊的对象,而且如果这个数组是一个可变数组,你还可以想其中添加更多的猫和狗对象。数组中的一些对象并不一定要是同质的。
NSArray 是一种不可变类型,也就是说,创建这个数组以后,不能对这个数组进行添加、删除、替换对象的操作。如果一个数组不改变或者说不批量改变的话,可以使用这种不可类型。
NSMutableArray 是一种可变数组,允许对数组进行添加、删除等操作,会在需要的情况下给数组分配内存。比如说一个初始的可变数组中只包含一个狗对象,你可以添加另外一个狗对象或者是猫对象或者是其他的任何对象。你也可以像在不可变数组中的操作一样,修改这个狗对象的名字,一般的,可以对不可变数组做的操作,都可以对可变数组进行操作。如果一个数组很大或者是递增改变的,应该使用可变数组类型。
数组类型是(NSArray),像
NSString 和 NSNumber一样, 可以通过 allocate-and-initialize 和 简便的类方法来创建对象实例。
1 NSArray *emptyArray = [NSArray array]; 2 NSArray *shoppingList = [NSArray arrayWithObjects:@"apples", @"bananas", @"milk", nil]; 3 NSArray *anotherShoppingList = [[NSArray alloc] initWithObjects:@"apples", @"bananas",@"milk", nil]; 4 NSArray *yetAnotherShoppingList = [NSArray arrayWithArray:anotherShoppingList];
5 NSArray * array = @[ @"Hello", NSApp, [NSNumber numberWithInt: 3] ];
注意:数组长度列举(variable-length lists)必须是以nil结尾的,如果不是以nil结尾的话,编译器会报错。
NSArray的两个主要的方法:
count:返回数组中所包括的元素的个数。
objectAtIndex: 通过index下标来访问数组元素,并且index下标从0(数字)开始。
Mutable Arrays
NSMutableArray提供了基本的添加、删除、替换数组元素的方法,主要方法如下所列:
1 addObject: 2 insertObject: atIndex: 3 removeLastObject 4 removeObjectAtIndex: 5 replaceObjectAtIndex:withObject:
如果没有特别要求一个元素添加到数组的特定下标位置或者说从数组的某一个特殊位置删除对象的话,可以使用第1和第3个方法,因为这两个方法是最快速的添加或者删除一个对象的方法。
1 NSMutableArray *array = [NSMutableArray array]; 2 [array addObject:[NSColor blackColor]]; 3 [array insertObject:[NSColor redColor] atIndex:0]; 4 [array insertObject:[NSColor blueColor] atIndex:1]; 5 [array addObject:[NSColor whiteColor]]; 6 [array removeObjectsInRange:(NSMakeRange(1, 2))]; 7 // array now contains redColor and whiteColor
注意:可变数组中的对象是可以添加和删除的。通过addObject:的方法添加对象到一个可变数组的最末尾。通过removeLastObjext 的方法移除可变数组中的最后一个对象。如果尝试移除从一个空数组中移除最后一个对象的话会引发运行时错误。
数组的使用:
使用objectAtIndex:方法,可以访问数组中的某个下标index所在位置的元素。例如:
NSString *someString = [arrayOfStrings objectAtIndex:2];
indexOfObject:这个方法相当于是给数组中的元素发送一个isEqual:的方法。而
indexOfObjectIdenticalTo: 方法则是用指针来对数组中的元素进行比较。用下面的例子来区分这两个方法的不同;
1 NSString *yes0 = @"yes"; 2 NSString *yes1 = @"YES"; 3 NSString *yes2 = [NSString stringWithFormat:@"%@", yes1]; 4 NSArray *yesArray = [NSArray arrayWithObjects:yes0, yes1, yes2, nil]; 5 NSUInteger index; 6 index = [yesArray indexOfObject:yes2]; 7 // index is 1 8 9 index = [yesArray indexOfObjectIdenticalTo:yes2]; 10 // index is 2
标签:
原文地址:http://www.cnblogs.com/SH9186ios/p/4677329.html