Object C学习笔记11-数组
在Object C也提供了类似C#中的Array数组对象,在Object C中使用NSArray 来创建数组;但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char,double等基本数据类型
一. 不可变数组对象
这个和之前的 NSString 有些类似,NSArray 能够创建不可变的数组对象。一旦初始化这个对象就不能动态的修改和增加这个数组。
(1)使用 arrayWithObjects 来初始化数组内容,参考如下代码:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];
上面初始化了一个items数组对象,但是值得注意的是,这段代码会报错,在Object C中数组对象的创建有个特殊的地方,就是最后一个元素必须是nil,这意味着使用nil来标识数组对象的结束。正确的方式如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
(2)可以使用count方法来获取数组的长度
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
NSLog(@"%d",[items count]);
以上代码得到的值是2,还是3呢,一般人都会认为是3,但是这个数组的长度是2,上面已经提过了nil只是作为一个结束标识符,并不能代表素组内容。现在修改代码如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil];
NSLog(@"%d",[items count]);
得到的数组长度仍然为2,在第一个nil的位置就已经标识数组结束了,所以后面出现再多的数组元素都没有作用。
(3)使用objectAtIndex来获取某个索引位置的数组元素
NSLog(@"%@",[items objectAtIndex:0]);
以上代码可以获得素组对象items索引位置为0的元素,但是一定要注意数组的长度,否则数组越界异常。
(4)使用for来遍历数组元素
for(int i=0;i<[items count];i++){ NSLog(@"%@",[items objectAtIndex:i]); }
以上代码和我们平时使用遍历数组的方式无异,基本都是这种情况。但是for还有另外一种使用方式,和C#中的foreach使用方式一样。
for(NSObject *item in items){ NSLog(@"%@",item); }
二. 动态数组
(1)根据上面所描述的,大致可以猜得出来动态数组类,和 NSMutableString 比较类似。我们使用 NSMutableArray 来定义一个动态数组。而且NSMutableArray 还提供了一些方法动态像数组中添加元素,在NSMutableArray不用担心在添加元素的时候发生数组越界的问题,当NSMutableArray长度被占满之后会自动扩容。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];
我们使用arrayWithCapacity来定义一个数组的容量。
(2)可以使用addObject方法来向对象数组中添加元素,而且NSMutableArray和NSArray不一样,不需要使用nil来介绍标识数组结束。NSMutableArray中同样提供了count 方法来获取数组的长度,这里需要注意的是count和capacity 是不一样的,count是获取的实际长度,而capacity是可存放的长度。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:12]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; NSLog(@"%d",[mutItems count]);
如果往muItems中继续添加元素,直到超过12个,muItems也不会报错,而且count也会大于12,这也是NSMutableArray的优势所在。
(3)使用insertObject 在特定的位置添加元素
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; [mutItems addObject:@"45454"]; NSLog(@"%d",[mutItems count]); [mutItems insertObject:@"wang" atIndex:1]; for (NSString *item in mutItems) { NSLog(@"%@",item); }
(4)删除数组中的元素
- (void)removeObject:(id)anObject inRange:(NSRange)range; 设置在一定范围内删除,如果在这个范围内没有匹配的元素则什么都不删除。
- (void)removeObject:(id)anObject; 删除指定元素
- (void)removeObjectsInArray:(NSArray *)otherArray; 删除数组中指定的元素
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes; 删除指定索引位置的元素
NSRange range=NSMakeRange(0, 2); [mutItems removeObject:@"wang" inRange:range]; for (NSString *item in mutItems) { NSLog(@"----- %@",item); }
(5)替换数组元素内容
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用这个方法来替换某个索引位置的元素
[mutItems replaceObjectAtIndex:1 withObject:@"FFFFFFFFFFFFFF"]; for(NSString *item in mutItems){ NSLog(@"************ %@",item); }