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)
枚举行为 快速枚举,修改集合会导致崩溃 基于迭代器协议,值类型修改不影响枚举
修改集合的影响 直接修改集合会导致崩溃 值类型修改不影响枚举,引用类型可能崩溃

相关推荐
GitLqr11 小时前
Flutter 3.47 与 Dart 3.13:你必须了解的迁移指南
flutter·ios·dart
冯汉栩16 小时前
Swift Control View,Label渐变颜色(源码)
开发语言·ios·swift
jike_202618 小时前
iPhone日历查看会议纪要APP推荐:按日期查找历史录音更方便
ios·语音识别·iphone
冯汉栩1 天前
OC 技术 App上存蒲公英教程
ios
码云之上1 天前
小程序 iOS 多输入框焦点乱序脱坑记
ios·微信小程序·taro
2501_915909062 天前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
随遇丿而安2 天前
第 1 周:别小看 `UILabel`,它跟 Android TextView 不只是名字不同
ios
游戏开发爱好者83 天前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
Anhty4 天前
2026 实测 4 款 AI 变声器|QQ 聊天伪装声线,告别僵硬假声
人工智能·功能测试·ios·智能手机·安卓
唔664 天前
flutter web iOS 在浏览器加载中文慢的问题
前端·flutter·ios