iOS for...in 循环

0x00 循环遍历一

输出结果是什么?

NSMutableArray *marr = @[@1, @2, @3].mutableCopy;
for (NSNumber *number in marr) {
    NSLog(@"%@", number);
    marr = @[@4, @5, @6].mutableCopy;
}
NSLog(@"%@", marr);

0x01 循环遍历二

输出结果是什么?

NSMutableArray *marr = @[@1, @2, @3].mutableCopy;
for (NSNumber *number in marr) {
    NSLog(@"%@", number);
    [marr addObject:@4];
}
NSLog(@"%@", marr);

0x02 循环遍历三

输出结果是什么?

var arr = [1, 2, 3]
for number in arr {
    print(number)
    arr = [4, 5, 6]
}
print(arr)

0x03 循环遍历四

输出结果是什么?

var arr = [1, 2, 3]
for number in arr {
    print(number)
    arr.append(4)
}
print(arr)

0x04 答案

循环遍历一,输出:

1

2

3

(

4,

5,

6

)


循环遍历二:

打印 1 后,崩溃:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x60000075c3c0> was mutated while being enumerated.'


循环遍历三,输出:

1

2

3

[4, 5, 6]


循环遍历四,输出:

1

2

3

[1, 2, 3, 4, 4, 4]


0x05 结论

for...in 循环过程中,OC 不能修改集合,Swift 可以修改

直接改变指向,都没问题!

特性 Objective-C Swift
集合类型 类对象(NSArray、NSMutableArray) 值类型(Array、Dictionary)
内存管理 引用计数(ARC) 值类型(栈内存),引用类型(ARC)
枚举行为 快速枚举,修改集合会导致崩溃 基于迭代器协议,值类型修改不影响枚举
修改集合的影响 直接修改集合会导致崩溃 值类型修改不影响枚举,引用类型可能崩溃

相关推荐
呜昂昂3 小时前
ios开发框架封装(十):MBProgressHUD基本使用与二次封装
ios
刘小哈哈哈5 小时前
iOS UIGestureRecgonizer自动化点击埋点
ios·自动化·cocoa
刘小哈哈哈5 小时前
iOS 使用消息转发机制实现多代理功能
macos·ios·cocoa
刘小哈哈哈7 小时前
iOSUITableVIewCell 自动化点击埋点
ios·自动化·cocoa
一只月月鸟呀21 小时前
uniapp 测试 IPA 包安装到测试 iPhone
ios·uni-app·iphone
Mamong21 小时前
Metal学习笔记七:片元着色器
ios·swift·metal
北京自在科技1 天前
苹果与小米破冰合作:iPhone 16e全面支持Find My网络,跨生态互通实现技术性突破
网络·ios·iphone·小米·findmy·小米15ultra
1024小神2 天前
iphone上ios设备开启safari开发者debug模式,配合mac电脑使用
macos·ios·iphone