NSMutableArray 删除可变数组元素

Posted gj-ios

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSMutableArray 删除可变数组元素相关的知识,希望对你有一定的参考价值。

平时使用 NSMutableArray 中经常用到遍历删除数组元素的问题。
一般第一个想法是使用一下 forin 就解决了,但是老司机都会知道使用 forin 做删除操作的时候会 crash。
报错的原因是:

当数组在枚举的时候被修改了,因为数组规定在forin遍历的时候不能修改数组元素。
但是有一种特殊情况,就是在删除数组最后一个元素的时候可以使用forin,因为到最后一个元素的时候forin枚举已经结束了,这时候删除元素不会影响到forin工作。

NSMutableArray *nameArray = @[@"1", @"2", @"3", @"4"];

 使用倒序forin 删除元素

//创建逆序遍历
NSEnumerator *enume = [nameArray reverseObjectEnumerator]; 
for (NSString *name in enumerator) {  
    if ([name isEqualToString:@"2"]) {  
        [array removeObject:name];  
    }  
}

使用 for 循环进行遍历删除
遍历整个数组,找到对应的元素,然后执行删除操作 

for (int i = 0; i < count; ++i) {
	NSString *name = nameArray[i];
	if ([name isEqualToString:@"2"]) {
		nameArray removeObject:name];
	}
}

 还有一种方式是定义一个副本数组,对这个副本数组进行遍历,在原数组中进行删除操作

NSMutableArray *copyNameArray = [NSMutableArray arrayWithArray:nameArray];
for (NSString *name in copyNameArray) {
	if ([name isEqualToString:@"2"]) {
		[nameArray removeObject:name];
	}
}

 

以上是关于NSMutableArray 删除可变数组元素的主要内容,如果未能解决你的问题,请参考以下文章

OC系列foundation Kit基础-NSMutableArray

Objective - C NSArray不可变数组和NSMutableArray可变数组

NSMutableArray 的copy问题

iOS 开发--NSMutableArray使用枚举方法

NSmutableArray 的实现原理机制

如何在 NSMutableArray 上添加观察者?