Foundation框架(NSArray、NSMutableArray)

第一讲 NSArray、NSMutableArray

一、NSArray

概述:NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组,C语言中数组的弊端,int array[4] = {10, 89, 27, 76};只能存放一种类型的数据.(类型必须一致),不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)。

使用注意:只能存放任意OC对象, 并且是有顺序的,不能存储非OC对象, 比如int\float\double\char\enum\struct等它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素

1、数组的创建  

1 NSArray *array = [NSArray array];  //类方法创一个数组,这个数组永远为空
2 NSArray *arr = [[NSArray alloc]init];   //对象方法创建一个数组,这个数组永远为空
3 NSArray *array2 = [NSArray arrayWithObject:@“jack”];  //类方法创建含有一个元素的数组
4 NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil]; //创建含有多个元素的NSArray数组
5 NSArray *array4 = @[@"jack", @"rose", @“4324324"]; // 快速创建一个NSArray数组

2、数组的访问

1 NSArray *array4 = @[@"jack", @"rose", @"4324324"];
2 NSLog(@"%ld", array4.count);//输出数组元素个数
3 NSLog(@"%@", [array4 objectAtIndex:1]); //访问数组中索引为1的元素
4 NSLog(@"%@", array4[0]);//访问数组中索引为0的元素
5 NSLog(@"last =%@",[array4 lastObject]);  //访问数组中的最后一个元素
6 NSLog(@"first = %@",[array4 firstObject]); //访问数组的的第一个元素

3、数组的遍历

 1 //1.常规遍历
 2 NSArray *arr = [NSArray arrayWithObjects:@"jjj",@"ddd",@"yyy",@"vvv", nil];
 3 for (int i = 0; i < arr.count; i++) {
 4 NSLog(@“%@",arr[i]);
 5 }
 6 //2.增强for循环
 7 for (NSObject *obj in arr ) {
 8   NSLog(@"obj = %@",obj);
 9 }
10 //3.OC迭代器
11 [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
12 if (idx == 2) {
13 *stop = YES;
14 }
15 NSLog(@"obj =%@,idx = %lu",obj,idx);
16 }];

4、自定对象数组方法调用  

 1 //假设person类中有say 和 sayWithName:withObject方法
 2 - (void)say
 3 {
 4     NSLog(@"加油");
 5 }
 6 - (void)sayWithName:(NSString *)name
 7 {
 8     NSLog(@"%@ 加油", name);
 9 }
10 NSArray *arr1 = @[p,p1,p2,p3,p4];
11 //第一种方式 调用无参的
12 [arr1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
13 [obj say];
14 }]
15 //第二种方式 调用无参的
16 [arr1 makeObjectsPerformSelector:@selector(say)];
17 //调用有参的
18 [arr1 makeObjectsPerformSelector:@selector(sayWithName:) withObject:@"tg" ];

5、数组的排序

 1 //1.OC对象数组的排序
 2 NSArray *arr = [NSArray arrayWithObjects:@81,@22,@53,@34,@8, nil];
 3 //数组的排序方法 sortedArrayUsingSelector
 4 NSArray *newStr = [arr sortedArrayUsingSelector:@selector(compare:)];
 5 NSLog(@"%@",newStr); //输出结果:8,22,34,53,81
 6 //2.自定义对象数组的排序
 7 Person *p = [[Person alloc]init];
 8 p.age = 14 ;
 9 Person *p1 = [[Person alloc]init];
10 p1.age = 210 ;
11 Person *p2 = [[Person alloc]init];
12 p2.age = 50 ;
13 Person *p4 = [[Person alloc]init];
14 p4.age = 20 ;
15 Person *p3 = [[Person alloc]init];
16 p3.age = 54 ;
17 NSArray *arr =@[p,p1,p2,p3,p4];
18 NSArray *newArr = [arr  sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
19     return obj1.age > obj2.age; // 二分法
20 }];
21 NSLog(@“输出排序后的数组%@",newArr);

6、NSArray和NSString之间的转换

  1)数组之间的元素用"-"连接

1 //数组元素之间用-相连
2 NSArray *arr = @[@"lnj",@"lmj",@"jjj"];
3 NSMutableString *strM = [NSMutableString string];
4 for(NSString *str in arr ) {
5 [strM appendString:str];
6 [strM appendString:@"-"];
7 }
8 [strM deleteCharactersInRange:NSMakeRange(strM.length-1, 1)];
9 NSLog(@"%@",strM); //输出结果:lnj-lmj-jjj

  2)数组之间的元素用"**"连接

1 NSArray *arr = @[@"lnj",@"lmj",@"jjj"];
2 NSString *str = [arr componentsJoinedByString:@"**"];
3 NSLog(@"str = %@",str);  //输出结果:str = lnj**lmj**jjj

  3)将一个字符串切割成数组

1 //将一个字符串切割成数组
2 NSString *str = @"lnj*lmj*zyt";
3 NSArray *arr = [str componentsSeparatedByString:@"*"];
4 NSLog(@"arr = %@",arr);

7、数组的读写

  1)将数组写入到文件中

 1 //数组中的元素须是Foundation框架中得OC对象
 2 NSArray *arr = @[@"rty",@"xds",@"yer"];
 3 BOOL flag =[arr writeToFile:@"/Users/tangge/Desktop/赵玉堂.plist" atomically:YES];
 4 NSLog(@"flag = %d",flag);
 5
 6 //数组元素是自定义对象不能写入到文件中
 7 Person *p = [[Person alloc] init];
 8 p.age = 13;
 9 Person *p1 = [[Person alloc] init];
10 p.age = 25;
11 Person *p2 = [[Person alloc] init];
12 p.age = 34;
13 Person *p3 = [[Person alloc] init];
14 NSArray *arr = @[p,p1,p2,p3,p4,p5];
15 bool flag = [arr writeToFile:@"/Users/tangge/DeskTop/堂哥.plist" atomically:YES ];  //报错
16 NSLog(@"%d",flag);  

  2)从文件中读取数组

1 NSString *path = @"/Users/tangge/DeskTop/赵玉堂.plist";
2 NSArray *arr = [NSArray arrayWithContentsOfFile:path];
3 NSLog(@"%@",arr);

8、判断一个数组是否包含某一元素

1 NSArray *arr = [NSArray arrayWithObjects:@"zyt",@"yyu",@"zjj", nil];
2 if ([arr containsObject:@"yt"]) {
3     //包含返回YES,否则包含NO
4     NSLog(@"arr中包含zyt");
5 }
6 else
7 {
8     NSLog(@"arr中不包含zs");
9 }      

二、NSMutableArray

概述:NSMutableArray是NSArray的子类,NSArray是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素,NSMutableArray是可变的,随时可以往里面添加\更改\删除元素。

1、NSMutableArray的创建

1 NSMutableArray *array = [NSMutableArray array]; //创建一个空的可变数组
2 NSMutableArray *array = [NSMutableArray arrayWithObject:@"zyt"];//创建含一个元素的可变数组
3 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; //创建含有多个元素可变数组

2.NSMutableArray基本使用

 1 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; //创建一个可变数组
 2 [array addObjectsFromArray:@[@"zyt",@"ttt",@"ggg"]];//将指定数组中得元素都取出来,放到array中,并不是将整个数组作为一个元素添加arrM数组中
 3 [array addObject:@“jack"];  //向数组添加一个元素,不能向数组中添加空元素 [array addObject:nil]
 4 [array addObject:@[@“lmj",@"lng"]]; //以下是将整个数组作为一个元素推添加
 5 [array insertObject:@"XCQ" atIndex:0];   //通过指定索引向array中插入一个元素
 6 [array removeAllObjects];  // 删除数组所有元素
 7 [array removeObject:@"jack"];// 删除指定的对象
 8 [array removeObjectAtIndex:0];//删除索引对应位置的元素
 9 [array removeLastObject];  // 删除最后一个元素
10 [array replaceObjectAtIndex:0 withObject:@“C"]; //替换指定索引位置的元素
11 array[0] = @"wwwww";//替换指定位置的元素
12 //插入一组数数据,指定数组需要插入的位置 和 需要插入的个数
13 NSRange range = NSMakeRange(0, 2);
14 NSIndexSet *set =[NSIndexSet indexSetWithIndexesInRange:range];
15 [array insertObjects:@[@"A",@"B"] atIndexes:set];

3、NSArray和NSMutableArray比较

NSArray是可变的,NSMutableArray是不可变的。NSMutableArray不能通过@[]来创建一个不可变数组,因为@[]创建出来的是一个不可变数组,如果把一个不可变数组当做一个可变数组会引发一个运行时错误。

时间: 2025-01-14 01:38:32

Foundation框架(NSArray、NSMutableArray)的相关文章

Foundation 框架 NSArray、NSMutableArray排序

一.使用selector对数组进行排序(无返回) 数组 book 中包含 AddressCard对象. 1.对数组调用 sortUsingSelector方法 1 -(void) sortByName 2 { 3 SEL s = @selector(compareName:); 4 [book sortUsingSelector: s]; 5 } 2.在AddressCard类中添加比较方法:compareName 1 -(NSComparisonResult) compareName: (Ad

[OC Foundation框架 - 9] NSMutableArray

可变的NSArray,可以随意添加OC对象 1.创建 1 void arrayCreate() 2 { 3 NSMutableArray *array = [NSMutableArray arrayWithObject:@"1"]; 4 5 [array addObject:@"2"]; 6 [array addObject:@"3"]; 7 8 [array removeObject:@"2"]; 9 NSLog(@&quo

foundation框架--NSArray类、数组常用操作

数组 是一组有序的对象集合,不能存放基本数据类型,只能存放类的实例(对象) NSArray *array1=[NSArray arrayWithObject:@"One"]; NSArray *array2=[NSArray arrayWithObjects:@"One",@"Two",nil]; NSArray *array3=[NSArray arrayWithArray:array2];(2和3指向同一个地址) NSArray *array

OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类: http://blog.csdn.net/jiangwei0910410003/article/details/41788223 今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的.

黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类

今天我们继续来看一下Foundation框架中的NSArray类和 NSMutableArray类,NSArray类 是不可变的,NSMutableArray类是可变的. 一.NSArray类 NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型.结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装 同时不能在NSArray中存储nil // // main.m // 16_NSArray // // Created by waterfoxjie

(转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的. 下面就先来看一下NSArray类: 一.NSArray类 1 // 2 // main.m 3 // 16_NSArray 4 /

【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词

一. 字符串 API 1. NSString 用法简介 (1) NSString API 介绍 NSString 功能 : -- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 String 开头的方法; // init 开头方法创建字符串 unichar data[5] = {97, 98, 99, 100, 101}; NSString * str = [[NSString alloc] initWithCharacters : data length : 5]; // str

Foundation框架的基本对象之数组对象

在程序设计中数组的使用非常频繁,Foundation框架提供了NS数组类型,NS数组类型包括可修改的和不可修改两种,只能用来存放相关的对象类型,OC为我们提供了相关的基本的数组操作,并对相关的数组操作进行了封装. 数组的定义 我们可以简单的把数组看做是把同一类型的数据有序的进行排列,进行同一存储,即同种类型数据的集合. 数组的声明 数组声明和变量声明类似 格式:数组类型  数组名[数组大小]例如 :int score[5]; 数据类型  数组名[长度]=[数值1,数值2,……,数值n]. 例如:

魏兆辉的IOS基础学习笔记之十一 OC语言基础-06 Foundation框架介绍

在之前的博文中,我们创建的项目文件的时候,默认都有引用#import <Foundation/foundation.h> 这个头文件.但是,之前我们对Foundation都没有展开介绍.这篇博文,我们就揭开它神秘的面纱. 之前,我们有提到过OC使用的是Cocoa框架.那么Cocoa和Foundation之间,有啥关联呢?实际上,Cocoa是由许多个不同的框架组成的.最常用的是Foundation和Application Kit. Foundation框架中有很多有用的.面向数据的简单类和数据类