一、NSArray
1.NSArray是Foundation框架中的1个类,是OC中的数组,NSArray对象是1个数组对象,存储多个数据的。
首先我们来回顾一下C语言的数组有哪些特点:
a.元素类型相同
b.长度固定
c.每个元素是连续的。
好,那么OC的数组有哪些特点?
a.NSArray数组中只能存储OC对象,非OC对象无法存储。
b.长度固定,一旦创建,数组中的元素无法新增和删除,甚至元素的值都无法更改。
c.NSArray数组中的每一个元素扔然是连续的,仍有下标/索引。
d.NSArray数组的元素的类型是id类型的。
2.NSArray数组的创建。
首先它是一个类,要创建对象才可以使用。
NSArray * arr1 = [NSArray new]; NSArray * arr2 = [[NSArray alloc] init]; NSArray * arr3 = [NSArray array];
这么创建出来的数组的元素的个数是0个,没有意义的,因为NSArray数组是无法新增数组元素的。
NSArray *arr = [NSArray arrayWithObject:@"jack"];
创建了1个长度为1的数组,数组的元素的值为@"jack",这样写也没有意义的,原因你懂的,因为数组不可新增元素了。
3.买了这么多官司,就是为了等待下面激动人心的时刻,数组常用的几种方式:
3.1用类方法创建数组
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lily",@"lelei",nil];
创建1个NSArray数组.并指定数组的元素的值.将每1个元素的值挨个挨个的写好.当所有的元素写完毕之后,记住后面跟1个nil,这个时候nil代表结束. 代表元素在这个地方结束.
强调:a.当我们将所有的元素写完以后,最后一定要跟1个nil,表示结束。
b.如果把你nil放在前面,就会认为元素到此结束。
c.NSArray只能存储OC对象,其他的别想了。
4.最常用的创建NSArray数组的方式。
创建NSArray对象的简写方式。
NSArray * arr = @[@"jack",@"rose",@“lucy”];
记住这种写法后面就不需要加nil了。
因为NSArray数组是无法存储非OC对象的,nil的本质就是0是基本数据类型。
5.NSArray数组的使用
a.使用%@就可以直接输出NSArray数组中的元素的值,需要注意的是,如果存储的是中文字符,输出的就是这个中文字符的Unicode编码。用%@打印整改NSArray数组对象的时候,如果元素是字符的中文,就会有乱码。
b.NSArray数组不能存储nil.
1.使用中括号写下标来取出指定的元素的值。
NSArray *arr = @[@"jack",@"rose",@"lily",@"jim",@"lilei",@"中文"]; NSLog(@"arr[1] = %@",arr[5]); 需要注意的时候,如果使用下标取出来的元素是1个中文字符串,是可以正常输出的.
调用数组对象方法也是可以取出指定下标的元素的值。
- (ObjectType)objectAtIndex:(NSUInteger)index; ObjectTyoe ---- id
6. NSArray数组对象的其他的常用方法
1). 得到数组的长度. 得到数组的元素的个数. @property (readonly) NSUInteger count; 2). 获取数组中指定下标元素的值. - (ObjectType)objectAtIndex:(NSUInteger)index; 如果下标越界,运行必报错. 3). 判断数组中是否包含指定的元素. - (BOOL)containsObject:(ObjectType)anObject; 4). 取到数组中的首个元素. @property (nullable, nonatomic, readonly) ObjectType firstObject 如果使用下标0去取,如果数组的长度为0 那么就会报错. 如果使用firstObject取,就返回nil 不会报错. 5). 取到数组中的末尾元素. @property (nullable, nonatomic, readonly) ObjectType lastObject; 6). 查找指定的元素在数组中第1次出现的下标. - (NSUInteger)indexOfObject:(ObjectType)anObject; 如果没有找到,就返回NSNotFound.就是NSUInteger的最大值.
7.变量NSArray数组
1)使用for循环,将每一个元素的下标变量出来,通过下标取值
NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"]; for(int i = 0; i < arr.count;i++) { NSLog(@"%@",arr[i]); NSLog(@"%@",[arr objectAtIndex:i]); }
2)使用循环增强来遍历。
a.语法格式
for(元素类型 变量名 in 数组名){
变量名的值就是数组中每1个元素的值
}
执行原理:
将数组中第0个元素的值赋给迭代变量,然后执行循环体。
将数组中第1个元素的值赋给迭代变量,然后执行循环体
将数组中第2个元素的值赋给迭代变量,然后执行循环体
将数组中第3个元素的值赋给迭代变量,然后执行循环体
将数组中第4个元素的值赋给迭代变量,然后执行循环体
。。。。。
将数组中最后一个元素的值赋给迭代变量,然后执行循环体。
自动结束循环。
再次强调如何使用增强for循环来变量数组
-迭代变量的类型写数组中真正存储的数据的类型。
-迭代变量的名称可以自己随便写,因为这只是一个变量,当然最好可读性高。
-in是固定的其实跟java的增强for循环格式一样,只是java里使用了:而不是in
-要遍历那个数组就把那个数组写在in后面就OK了
-在循环体中,迭代变量的值就是数组元素中的每一个元素的值。
- 如果数组中存储的数据类型不一致,迭代变量建议使用id
3)使用block来遍历NSArray数组
- (void)enumerateObjectsUsingBlock:(void (^)(objectType obj, NSUIneger idx, BOOL *stop))block
这个方法的作用是遍历数组中的每一个元素。
NSArray *arr = @[@"jack",@"rose",@"lily"];
[arr enumerateObjectUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){
//obj:遍历出来的这个元素的值
//idx:遍历出来的这个元素的下标
NSLog(@"arr[%lu] = %@", idx,obj);
//如果想要停止遍历,就给这个stop指针指向的变量赋值为YES
if(idx == 2)//如果下标为2的时候就停止遍历了。
{
*stop = YES;
}
}];
8.NSArray与字符串相关的方法。
a使用指定的分隔符将数组中的每一个元素拼接成1个新的字符串。
- (NSString *)componentsJoinedByString:(NSString *)separator;
NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"]; NSString *str = [arr componentsJoinedByString:@""];
以指定的字符串分割
- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
二、NSMutableArray
1.是Foundation框架的一个类,它是NSArray的子类
所以NSMutableArray和NSArray一样,也是一个数组。
并且NSArray具备的功能,NSMutableArray一样肯定都有
NSMutableArray是一个可变的数组,这个数组中的元素可以新增和删除
2.NSMutableArray的创建
NSMutableArray *arr1 = [NSMutableArray new]; NSMutableArray *arr2 = [[NSMutableArray alloc] init]; NSMutableArray *arr3 = [NSMutableArray array];
这种方式创建出来的数组长度为0,但是这个是有意义的,因为这个数组的元素是可以动态的新增和删减的
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ... 这样创建也是可以的.但是一样 最后给1个nil
特别注意这样是不行的
NSMutableArray *arr = @[@"jack", @"rose",@"lily"];
@[@"jack", @"rose",@"lily"];这是创建NSArray简写的方式,是1个NSArray对象
3.NSMutableArray数组新增元素
1)NSMutableArray数组刚创建的时候,这个数组的长度为0.
每新增1个元素,才动态为这个数组新增一个元素。
2)新增的方法
- (void)addObject:(ObjectType)anObject;
将数组中的每一个元素取出来新增到当前这个可变的数组中。
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;
NSMutableArray *arr = [NSMutableArray array]; NSArray *arr1 = @[@"hehe",@"haha",@"hehe1"]; [arr addObjectsFromArray:arr1]; NSLog(@"%@",arr);
4.删除元素
1)根据下标来删除元素
- (void)removeObjectAtIndex:(NSUInteger)index;
2)删除数组中的最后一个元素
- (void)removeLastObject;
3). 清空数组中的所有的元素. - (void)removeAllObjects; 4). 删除数组中指定的元素. - (void)removeObject:(ObjectType)anObject; 所有删除. 5). 删除指定范围的元素 - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range; 6). 元素的插入: - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
[arr removeObject:@"rose31111"];
[arr removeObject:@"rose3"inRange:NSMakeRange(5, 2)];
[arr removeObjectAtIndex:0];
[arr removeLastObject];
[arr removeAllObjects];
相关推荐
NSArray和NSMutableArray是两个常用的数组类,分别代表不可变数组和可变数组。下面将详细介绍这两个类的一些基础操作。 首先,创建NSArray的基本方法是通过`initWithObjects:`初始化,如: ```objc NSArray *array ...
FFSafeKit安全地使用NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMutableString。 功能安全访问NSArray安全访问NSDictionary安全访问并执行更改FFSafeKit安全地使用NSArray,NSMutableArray,...
在本文中,我们将详细介绍 NSMutableArray 和 NSArray 的区别,并讨论它们的使用场景和优缺点。 一、 NSMutableArray 和 NSArray 的定义 NSMutableArray 和 NSArray 都是用于管理对象集合的类,它们都是 NSObject ...
"swift-Array安全工具"正是为了解决这个问题,通过利用Swift的runtime特性,提供了一种方法来增强NSArray和NSMutableArray的安全性,防止因错误操作导致程序崩溃。 首先,我们要理解Swift数组越界的原理。在Swift中...
Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。
NSPredicate应用,包括以下几个部分: 1、字符串,正则表达式的匹配; 2、字符串数组NSArray和NSMutableArray的快捷过滤方式; 3、自定义对象数组NSArray和NSMutableArray的快捷过滤方式;
本篇文档主要总结了OC中基础的集合类型,包括数组(NSArray和NSMutableArray)以及字典(NSDictionary)和集合(NSSet)。这些知识点对于初学者来说是非常实用的。 首先,我们来关注OC中的数组。数组分为两种类型:...
NSArray和NSMutableArray由于维护有序性和允许重复元素,某些操作如`containsObject:`、`indexOfObject:`等会遍历整个数组,时间复杂度为O(n)。而`objectAtIndex:`、`firstObject:`、`lastObject:`、`addObject:`和`...
总之,“IOS应用源码之Array.rar”可能是为了帮助开发者更好地理解和使用NSArray和NSMutableArray,通过实际的代码示例来展示这些概念在iOS应用开发中的应用。学习并理解这些知识点对于提升iOS开发技能至关重要。
在Objective-C中,字符串被封装在NSString类中,数组由NSArray和NSMutableArray类来管理,字典则由NSDictionary和NSMutableDictionary来实现,而集合则由NSSet和NSMutableSet来表示。此外,还提供了快速枚举等便捷的...
Objective-C提供了两个数组类:NSArray和NSMutableArray。NSArray用于创建不可变数组,而NSMutableArray则提供了修改数组内容的方法。以下是Objective-C中数组操作的详细知识点总结: 1. **创建数组**: - 使用`...
为了提高代码的可维护性和可扩展性,可以创建一个类别(Category)来扩展NSArray和NSMutableArray,添加专门的归档和解档方法。这样,你可以在任何地方方便地调用这些方法,而无需在每个模型数组实例中重复实现归档...
Objective-C提供了NSArray和NSMutableArray两种类型的数组。NSArray是不可变的,即一旦创建就不能修改;而NSMutableArray则是可变的,支持添加、删除和替换元素等操作,当然也包括排序。这里我们将主要讨论...
在Objective-C中,NSArray和NSMutableArray是两种常用的数组类型。NSArray是不可变的,一旦创建就不能修改;而NSMutableArray则是可变的,支持添加、删除和插入元素。对于NSMutableArray,可以使用`insertObject:at...
- **NSArray 和 NSMutableArray** - **定义**: - NSArray:不可变数组,一旦创建后不能更改。 - NSMutableArray:可变数组,可以在运行时添加、删除或替换元素。 - **用途**:用于存储一系列对象,并提供索引...
- 数组(NSArray和NSMutableArray)和字典(NSDictionary和NSMutableDictionary)的使用 - 基本数据类型和对象类型之间的转换 4. 第四章 - 控制流 - 条件语句(if-else, switch-case) - 循环语句(for, while,...
在Objective-C中,NSArray和NSMutableArray是常用的动态数组实现。动态数组允许在运行时添加、删除或更改其元素,这在处理游戏中的各种事件,如玩家移动、交易等时非常有用。例如,可以创建一个NSMutableArray来存储...