——黑马程序员——OC中Foundation框架NSSArray用法总结

来源:互联网 发布:php站长工具源码 编辑:程序博客网 时间:2024/06/06 08:59

-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

OC中Foundation框架NSSArray用法总结

一、NSSArray的基本概念

OC中的数组类,开发中尽量使用NSArray替代c语言中的数组

1、C中数组弊端:

只能存放一种类型的数据,类型必须一致

不能很方便的动态添加数组元素、不能很方便的动态删除数组元素,长度是固定的

2、 NSArray的使用注意

(1)只能存放任意OC对象,并且有序

(2)不能存放非OC对象,比如 int 、float、double、char、enum、struct类型数据

(3)是不可变的,一旦初始化完成后,在内存所占空间和内容永远是固定的,不能删除或添加元素

(4)NSArra使用NSLog打印输出时是小括号括起来的形式

(5)NSArray中不存储nil ,因为默认nil 为数组的结束,nil 就是0,是基本数据类型,不能存放在NSArray中,在不能使用nil的场合只能使用[NSNull  null ]来存储

(6)不能这样写 NSArray *arr = [NSArray arry];,因为他是空数组,是常量不能更改

二、NSArray的创建方式

1、创建一个空数组

+(instancetype) array       //    空数组

NSArray *arr1 = [NSArray array];    // 空数组,里面没有任何内容

2、创建数组,只有一个元素

+(instancetype) arrayWithObject: (id) anObject;     // 存一个 id 类型的对象

NSArray *arr2 = [NSAarray  arrayWithObject: @"1" ];

3、创建数组,有多个元素

+(instancetype) arrayWithObjects : (id) firstObj ,  .... ;  // 

NSArray *arr3 = [NSAarray  arrayWithObjects : @"one", @"two", @"1" , @1 ,nil ];

nil 表示数组元素赋值结束

4、调用对象方法,创建数组

NSArray *arr4 =  [ [ NSArray  alloc ]  initWithObjects: @"abc", @"RTR" , @"HGJ" , @"CNM" ,nil ];

5、用一个数组创建另一个数组

+(instancetype) arrayWithArray: (NSArray *) array; // 

NSArray *arr5 = [ NSArray arrayWithArray: arr3 ] ;

三、NSArray的常见用法

1、获取集合元素的个数(数组长度)

-(NSUInteger) count;

NSLog (@"arr1 = %@", arr1.count);

2、获取某个下标的元素

-(id) objectAtIndex:  (NSUInteger) index;

NSLog (@"%@",  [ arr4  index: 4] );

3、返回指定元素的下标

NSLog (@"下标 = %ld",  [arr4  indexOfObjcet: @"RTR" ] );

4、数组中是否包含了某个元素

 [arr4  containsObjcet: @"RTR" ] ;返回值是BOOL类型

5、用简化的方式定义数组  格式为:@ [ 数组元素 ]

NSArray *arr5 = @[ @"0", @"2", @"3", @4, @"TNT" ];

6、用简化的方式访问数组元素 

以C语言形式访问数组元素  

格式为:字符串指针 = 数组名[下标]

三、NSArray的遍历

1、普通方式,通过下标访问

for(int i = 0;i < arr4.count; i++){

NSLog(@"%@", arrr4[i]);

}

2、快速枚举法,for循环的增强形式

for(NSString *str2  in arr4 ){

NSLog(@"%@", str2 );

}

3、用block的方式访问

[arr4 enumerateObjectUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop ){

NSLog(@"idx = %ld, obj = %@", idx, obj);

}];

使用block方式访问时可以控制什么时候停止,当*stop是yes的时候会停止

四、NSArray读写文件

NSArray *arr3 = [NSAarray  arrayWithObjects : @"a", @"b" , @"c"  ,nil ];

把NSArray 中的内容写入到文件中

[ arr3 writeToFile:@"文件路径" atomically:YES ];  返回值是BOOL类型的

读取文件中的内容

[ NSArray arrayWithContentsOfFile: @"文件路径" ];  返回值是NSArray类型的,可以从 .xml 文件中读取,也可以从 . plist文件中读取

五、NSArray 和字符串之间 的关系

1、把数组元素连接成字符串

格式:[数组名   componentJoinedByString:@" 用什么方式连接"];

NSArray *arr = @[@a,@b,@C,@d];;

[arr componentJoinedByString:@"&&&&&"];

2、把字符串分割成一个数组

NSString *str = @"400-800-12580";

NSArray  arr2  =  [str   componentsSeparatedByString:@"-"];

//打印第一个元素

NSLog(@"%@" , [arr2  firstObject] );   // 也可以使用下标法访问 NSLog(@"%@" , arr2 [ 0 ] );

//打印最后一个元素

NSLog(@"%@" , [arr2  lastObject] );

NSLog(@"%@" , arr2 [1 ] );

六、NSMutableArray的使用

NSMutableArray 也是可变的 用法和NSMutableString的用法相同

1、创建空数组

NSMutableArray *arr1 = [NSMutableArray array];

2、创建数组,并指定长度为5,此时也是空数组

NSMutableArray *arr2 = [ [NSMutableArray alloc] initWithCapacity:5] ;

3、创建一个数组,包含两个元素

NSMutableArray *arr2 = [ NSMutableArray  arrayWithObject : @"s", @"e" , @"t", nil] ;

4、调用对象创建数组

NSMutableArray *arr2 = [ [NSMutableArray alloc] initWithObjects:@"s", @"e" , @"t", nil ] ;

5、动态添加元素

-(void) addObject: (id) object ;

[ arr2 addObject:@"uhhfg" ];

给数组arr2添加元素uhhfg

6、在指定下标位置插入一个元素

-(void) insertObject:(id)anObject atIndex: (NSUInteger) index;

[arr2 insertObject:@"fgfgf" atIndex: 0;   

在小标为0 的位置插入元素 fgfgf

7、删除某一个元素

-(void) removeObject: (id) ;

8、根据下标位置删除

-(void) removeObjectAtIndex: ( NSUInteger ): 

8、删除所有元素

-(void) removeAllObjects ;

9、修改元素

-(void) replaceObjectAtindex: (NSUinteger) index withObject:(id) anObject;

[arr2  replaceObjectAtIndex:  1  withObject:@"R" ;

将数组arr2中下标为1的元素替换为 R

10、查找元素

-(void)containObject : (id); 

[arr3   containobject: @"one" ] ;

返回值是BOOL类型的
11、交换元素,可用作把数组元素打散

  -(void)exchangeObjectAtIndex: (NSUInteger) withObjectAtIndex:(NSUInteger);

将数组arr3中的第一个元素和最后一个元素进行交换

  [arr3  exchangeObjectAtIndex: 0 withObjectAtIndex:2;

八、NSMutableArray的错误用法

和NSMutableString一样,不能将一个数组常量赋值给 NSMutableArray
如:NSMutableArray *arry = @[ @"dfdg", @"dg" , @"ddg"  ]; 编译时会有提示,但是运行时报错
0 0
原创粉丝点击