NSArray
NSArray是一个Cocoa类,用来储存对象的有序列表。NSArray是不可变的,而且只能储存Object-c对象。另外,数组的最后一个元素一定是nil,表示结束。这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int,float, double,BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。
创建NSArray
// 创建一个空的数组
NSArray *array = [NSArray array];
// 创建一个有一个元素的数组
array = [NSArray arrayWithObject:@"123"];
// 创建有多个元素的数组
array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
使用
NSObject *obj = [[NSObject alloc] init];
NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
// 判断是否包含了某个元素
if ([array containsObject:@"a"]) {
NSLog(@"包含了字符串a");
}
// 获取最后一个元素
NSString *last = [array lastObject];
NSLog(@"last = %@",last);
// 获取索引位置的元素
NSString *str = [array objectAtIndex:1];
NSLog(@"第1个位置的元素是%@",str);
// 获取某个元素的索引
NSUInteger index = [array indexOfObject:@"a"];
NSLog(@"a的位置是第%li",index);
[obj release];
遍历
索引
- (NSUInteger)count;
可以获取它所包含的对象个数
for(NSinteger i = 0;i < [array count]; i++)
{
NSLog(@“”index %d has %@.”,i,array[i])
}
for(NSinteger i = 0;i < [array count]; i++)
{
NSLog(@“”index %d has %@.”,i,[array objectAtIndex:i])
}
枚举
从前往后
- (NSEnumerator *)objectEnumerator;
从后往前
- (NSEnumerator *)recerseObkectEnumerator
在获得枚举器之后,就可以开始一个while循环,每次循环都向这个枚举器请求它的nextObject
- (id) nextObject;
NSEnumerator *enumerator = [array objectEnumerator];
while(id thingie = [enumerator nextObject])
{
NSLog(@“I found %@”,thingie);
}
快速枚举
for (NSStirng *string in array)
{
NSLog(@"I found %@,string");
}
这个循环体将会遍历数组中的每一个元素,并且用变量string来储存每个数组值。
Block
还有一个通过代码块枚举对象的方法
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
[array enumerateObjectsUsingBlock:^(NSString *string,NSUInteger index,BOOL *stop)]
{
NSLog(@"I found %@",string);
}]
可变数组
与NSString一样NSArray也有一个可改变的对象数组NSMutableArray
创建NSMutableArray
+ (id) arrayWithCapacity: (NSUInteger) numItem;
</pre><pre name="code" class="html">NSMutableArray *array = [NSMutableArray arrayWitCapacity: 17]
添加
- (void) addObject: (id) anObject;
for(NSInteger i = 0;i<4;i++)
{
Tire *tire = [Tire new]
[array addObject: tire];
}
删除
- (void) removeObjectAtIndex: (NSUInteger) index;
[array removeObjectAtIndex:1];