前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于iOS for ... in 注意的地方

关于iOS for ... in 注意的地方

作者头像
developerbfl
发布2018-06-05 15:38:04
7330
发布2018-06-05 15:38:04
举报
文章被收录于专栏:iOS 开发iOS 开发

经常我们会筛选一个可变数组里面的元素讲不符合条件的删除掉一般我们的做法:

代码语言:javascript
复制
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"1",@"3",@"2",@"4",@"3",@"2",@"4", nil];
    for (NSString *obj in array) {
        if ([obj isEqualToString:@"2"]) {
            [array removeObject:obj];
        }
    }

这样程序就会抛出个异常如下

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x608000047590> was mutated while being enumerated.'

程序闪退~~

解决办法 1.采用for (NSInteger index = 0; index < array.count; index++) 遍历。需要注意下面4个类型在32-bit和64-bit下的长度区别

代码语言:javascript
复制
size_t type1 = sizeof(int);
size_t type2 = sizeof(long);
size_t type3 = sizeof(float);
size_t type4 = sizeof(double);
32-bit下:4, 4, 4, 8 64-bit下:4, 8, 4, 8

(PS: 这个结果随编译器,换其他平台可不一定)它们的长度变化可能并非我们对64-bit长度加倍的预期,所以说,程序中出现sizeof 的代码多看两眼。而且,除非你明确知道自己在做什么,应该使用下面的类型代替基本类型: int -> NSInteger unsigned -> NSUInteger float -> CGFloat 动画时间 -> NSTimeInterval …

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.11.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档