iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案

  1. 云栖社区>
  2. 博客>
  3. 正文

iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案

悟静 2013-12-27 21:46:00 浏览1010
展开阅读全文

iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。




这个简单问题,一直以来,五年苹果开发经验告诉我,不值得一提,也没有什么可提的。

不过,今天我犯了一个不值得一提的错误,一直以来,自认为不值得一提的错误,也是不断忽视之后,由认识变得陌生而导致的小错误。

题目是:遍历一个数组,符合条件的,加入另一个数组,同时从这个数组中移除掉,以节约存储空间。

分析:

1、由于是同一个对象在数组之间的加减,这个只是在加、减指针而已,只是增加引用计数,并没有增加实际内存空间分配;

2、加到没啥问题,我声明的目标数组是 NSMutableArray ,减的时侯,我使用的是 delete 方法,不过这个方法确实存在;

声明

NSArray *rows = [fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSMutableArray *geometryRows = [[NSMutableArray alloc] init];
使用

[geometryRows addObject:row];
[rows delete:row];
这里借 UIResponder 犯了这样的一个错误,自动提示出了这个类的 delete 方法;

而实际上 rows 是 NSArray 其元素是不可编辑的,改成如下即可:

    NSMutableArray *rows = [NSMutableArray arrayWithArray:[fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];

不过,当前这个题目,就是个没事儿找事儿的题目,为什么这么说呢?原因如下:

1、再增加,也是增加原对象的引用计数和指针地址,并不会有新的原对象内容复本内存发生分配,所以附增的内存分配很小,不用考虑;

2、离开当前环境,声明的指针不存在了,原指针所指向的内容,不再有指针索引,则 ARC 在编译时会检测到,为其添加释放内存的代码,故无需考虑内存泄漏;

3、由此可见,过分担心,没事儿找事儿,引发了这么多血案,浪费了这么多吐沫,希望还能有一点作用,就是用来警醒世人,不要再犯由此引发的一系列理解上偏差而造成的多宗血案;


钦此!



网友评论

登录后评论
0/500
评论
悟静
+ 关注