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

相关推荐
2501_9159214313 分钟前
Bundle Id 创建与管理的工程化方法,一次团队多项目协作中的流程重构
服务器·ios·小程序·重构·https·uni-app·iphone
2501_915909062 小时前
深度解析 iOS 内存占用,构建多工具协同的内存诊断、监控与优化体系
android·ios·小程序·https·uni-app·iphone·webview
longforus3 小时前
Flutter iOS 真机部署异常经验(Android Studio 提示无法运行,但 Xcode 可正常运行)
flutter·ios·android studio
为什么不问问神奇的海螺呢丶3 小时前
n9e categraf 监控项配置文件
ios·iphone
2501_915918414 小时前
iOS CPU 使用率深度分析,多工具协同定位高占用瓶颈的工程化方法
android·ios·小程序·https·uni-app·iphone·webview
2501_915106324 小时前
如何防止资源文件被替换?一套针对 iOS App 的多层资源安全方案
android·安全·ios·小程序·uni-app·iphone·webview
2501_915918414 小时前
IPA 一键加密工具的真实工程化实践 构建可自动化、可扩展的 iOS 应用安全体系
android·安全·ios·小程序·uni-app·自动化·iphone
九天轩辕4 小时前
基于 Qt 和 libimobiledevice 的跨平台 iOS 设备管理工具开发实践
开发语言·qt·ios
元气小嘉4 小时前
小程序开发中ios和安卓问题
android·ios