OC语言有自己的数组,和C语言的数组相比,OC中的数组完全不是那个样子。一起学习一下。
OC语言的数组就要用到NSArray这个类来声明,这是Foundation框架下的一个专门为数组而诞生的类。
NSArray的使用注意事项:
1、数组中存储的必须是对象(OC中的任意对象都可以,但是对于C语言中的int、double、float等不允许存储到NSArray数组里)。
2、数组中不允许存储nil。(因为NSArray存储数据结束的标志就是nil,如果在数组中存储了nil,就会产生冲突,从而丢失数据)。
创建NSArray的几种方式
对于上面两种方法,一个是类方法,一个是对象方法,都可以达到创建一个NSArray对象并初始化的目的。例子:
#import <Foundation/Foundation.h>
int main() {
NSArray * array1=[NSArray arrayWithObjects:@"0",@"1",@"2",@"3", nil];
NSLog(@"array1 are :%@",array1);
NSArray * array2=[[NSArray alloc] initWithObjects:@"00",@"11",@"22",@"33", nil];
NSLog(@"array2 are :%@",array2);
return 0;
}
输出结果为:
数组的count
同NSString类的length一样,NSArray为我们提供了count属性和count方法。例子:
#import <Foundation/Foundation.h>
int main() {
NSArray * array1=[NSArray arrayWithObjects:@"0",@"1",@"2",@"3", nil];
NSInteger count=[array1 count];//也可以用array1.count
NSLog(@"array1 are :%@ andTheCount is :%ld",array1,count);
return 0;
}
输出结果:
获取特定索引处的对象
- (ObjectType)objectAtIndex:(NSUInteger)index;
例子:
#import <Foundation/Foundation.h>
int main() {
NSArray * array1=[NSArray arrayWithObjects:@"0",@"1",@"2",@"3", nil];
NSString * str=[array1 objectAtIndex:1];
NSLog(@"%@",str);
return 0;
}
输出结果为:1
分析:对于OC中NSArray的数组,和C语言中数组的索引是一样的,都是从0开始。所以,对于array1这个数组来说,索引为1的对象是@“1”。
注意:在使用索引时,一定要注意索引是否存在,如果索引不存在,就会产生越界的情况。例如对于array1这个数组来说,他的索引范围是0-3(nil只是作为结束标注,本身并不包括在数组中),如果你引入的索引是4,就会出错。所以,使用索引时一定要注意索引是否有意义。
判断一个对象是否包含在一个数组中
- (BOOL)containsObject:(ObjectType)anObject;
例子:
#import <Foundation/Foundation.h>
int main() {
NSArray * array1=[NSArray arrayWithObjects:@"0",@"1",@"2",@"3", nil];
NSLog(@"%d",[array1 containsObject:@"1"]);
return 0;
}
输出结果:1
分析:由于该方法返回的是一个BOOL类型的值,之前我们介绍过BOOL类型的返回值如果是1,说明是真的;反之,是假的。
除了以上为大家介绍的方法,NSArray.h文件中还提供了实现各种功能的方法。我们大致可分为这么几类:1、排序方法。2、知道对象,获得该对象的索引的方法3、获取某文件中的数组的方法。……这些方法我们会在后边的学习中都接触到。有兴趣的朋友可以进入NSArray.h文件中去尝试使用这些方法。
NSMutableArray的使用
和NSString一样,除了有不可变的NSArray,Foundation还提供了可变的数组NSMutableArray。可变数组比不可变数组增加了对数组中对象的增删改的功能:
向数组中增加对象
增加一个对象的方法:
- (void)addObject:(ObjectType)anObject;
例子:
#import <Foundation/Foundation.h>
int main() {
NSMutableArray * array=[NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
[array addObject:@"4"];
NSLog(@"%@",array);
return 0;
}
输出结果:
一次增加多个对象的方法:
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;
例子:
#import <Foundation/Foundation.h>
int main() {
NSMutableArray * array=[NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
NSArray * addArray=[NSArray arrayWithObjects:@"4",@"5",@"6", nil];
[array addObjectsFromArray:addArray];
NSLog(@"%@",array);
return 0;
}
输出结果:
删除数组中的对象
删除数组中所有对象;- (void)removeAllObjects;删除某个对象:- (void)removeObject:(ObjectType)anObject;例子:
#import <Foundation/Foundation.h>
int main() {
NSMutableArray * array=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
[array removeObject:@"2"];
NSLog(@"the array is :%@",array);
[array removeAllObjects];
NSLog(@"the last array is :%@",array);
return 0;
}
输出结果:
对对象进行更改:
#import <Foundation/Foundation.h>
int main() {
NSMutableArray * array=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
[array replaceObjectAtIndex:2 withObject:@"7"];
NSLog(@"%@",array);
return 0;
}
输出结果:
通过以上对NSArray以及NSMutablArray的介绍,应该能够简单的对OC中数组有个初步的了解,能够运行数组这种结构实现一些小功能。
对于类中提供的方法的讲解,由于可供选择的方法太多,我介绍的不够全面。在以后的不断学习中,如果用到某个方法再介绍。
通过对NSString和NSArray和学习,是否可以发现Foundation框架中方法声明的一些规律:
在以后的学习中,会接触更多的类。就可以运用积累的这些经验来“蒙”代码。在不断的深入了解Foundation框架的过程中,你会发现更多的规律。
所以不介意初学者死记代码,那样做对以后的发展不利。要在学习的同时,自己不断摸索出它的规律,对自己的帮助会更大。当然,这只是我自己对Foundation的理解,和朋友们分享一下,希望可以帮助到你们。