Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。

NSArray不可变数组

  • [array count] : 数组的长度。

  • [arrayWithObjects; ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil

void demoNSArray() {NSObject *object = [[NSObject alloc] init];NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",object, nil];NSLog(@"array的数量是: %ld.",[array count]);//遍历数组for(NSObject *obj in array) {NSLog(@"%@",obj);}NSLog(@"%@",[array objectAtIndex:2]);}2016-10-10 11:11:03.471886 ArrayDemo[17100:1359352] array的数量是: 4.
2016-10-10 11:11:03.472329 ArrayDemo[17100:1359352] a
2016-10-10 11:11:03.472359 ArrayDemo[17100:1359352] b
2016-10-10 11:11:03.472373 ArrayDemo[17100:1359352] c
2016-10-10 11:11:03.472498 ArrayDemo[17100:1359352] <NSObject: 0x100403630>
2016-10-10 11:11:03.472518 ArrayDemo[17100:1359352] c

NSMutableArray可变数组

  • [NSMutableArray arrayWithCapacity:6] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度6以后NSMutableArray的长度会自动扩充,6是自己可以设置的颗粒度。

  • [array addObject:...] : 向可变数组尾部添加数据对象。

  • [array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。

普通使用

void demoNSMutableArray() {NSObject *object = [[NSObject alloc] init];NSMutableArray *array = [NSMutableArray arrayWithCapacity:6];[array addObject:@"1"];[array addObject:object];[array addObject:@"2"];[array addObject:@"3"];[array addObject:@"4"];[array insertObject:@"搅局的" atIndex:2]; //插入对象//遍历数组for(NSObject *obj in array) {NSLog(@"%@",obj);}NSRange range = NSMakeRange(0, 3);//object对象在此范围内则删除 否则不删除任何对象[array removeObject:object inRange:range];//遍历数组for(NSObject *obj in array) {NSLog(@"%@",obj);}}2016-10-10 11:11:03.472518 ArrayDemo[17100:1359352] c
2016-10-10 11:11:03.472556 ArrayDemo[17100:1359352] 1
2016-10-10 11:11:03.472583 ArrayDemo[17100:1359352] <NSObject: 0x100300120>
2016-10-10 11:11:03.472599 ArrayDemo[17100:1359352] 搅局的
2016-10-10 11:11:03.472611 ArrayDemo[17100:1359352] 2
2016-10-10 11:11:03.472621 ArrayDemo[17100:1359352] 3
2016-10-10 11:11:03.472632 ArrayDemo[17100:1359352] 42016-10-10 11:11:03.472661 ArrayDemo[17100:1359352] 1
2016-10-10 11:11:03.472673 ArrayDemo[17100:1359352] 搅局的
2016-10-10 11:11:03.472683 ArrayDemo[17100:1359352] 2
2016-10-10 11:11:03.472694 ArrayDemo[17100:1359352] 3
2016-10-10 11:11:03.472704 ArrayDemo[17100:1359352] 4

NSRange range = NSMakeRange(0,3); 设置一个范围为 0 到 3 之间。
[array removeObject:obj inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为obj对象在 数组 0 到 3的范围内,所以obj就被删除掉了。

删除对象removeObject和removeObjectIdenticalTo

  • [array removeObject:(id)] :删除数组中指定元素,根据对象isEqual消息判断。

  • [array removeObjectIdenticalTo:(id)] : 删除数组中指定元素,根据对象的地址判断

  • [array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。

  • [array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。

void doRemove() {NSString *str1 = [[NSString alloc] init];NSString *str2 = [[NSString alloc] init];NSString *str3 = [str1 stringByAppendingFormat:@"字符串"];NSString *str4 = [str2 stringByAppendingFormat:@"字符串"];NSMutableArray *array = [NSMutableArray arrayWithCapacity:6];[array addObject:@"对象"];[array addObject:str3];[array addObject:str4];for(NSObject *obj in array) {NSLog(@"数组对象: %@",obj);}//比字符串值if ([str3 isEqual:str4]) {NSLog(@"str1 == str2");}//比对象的地址if (str3 == str4) {NSLog(@"str1 == str2");}//[array removeObject:(id)] :删除数组中指定元素,根据对象isEqual消息判断,即根据对象的值判断。
//    [array removeObject:str3]; //删除所有值为str3的对象//[array removeObjectIdenticalTo:(id)] : 删除数组中指定元素,根据对象的地址判断[array removeObjectIdenticalTo:str3]; //只删除str3对象for(NSObject *obj in array) {NSLog(@"数组对象: %@",obj);}}2016-10-10 11:19:17.050519 ArrayDemo[17200:1366118] 数组对象: 对象
2016-10-10 11:19:17.050541 ArrayDemo[17200:1366118] 数组对象: 字符串
2016-10-10 11:19:17.050554 ArrayDemo[17200:1366118] 数组对象: 字符串
2016-10-10 11:19:17.050571 ArrayDemo[17200:1366118] isEqual str1 == str2
2016-10-10 11:19:17.050590 ArrayDemo[17200:1366118] 数组对象: 对象
2016-10-10 11:19:17.050642 ArrayDemo[17200:1366118] 数组对象: 字符串

替换某索引值对应的对象

void doReplace() {NSObject *object = [[NSObject alloc] init];NSMutableArray *array = [NSMutableArray arrayWithCapacity:5];[array addObject:@"1"];[array addObject:@"2"];[array addObject:@"3"];[array addObject:@"4"];[array addObject:object];for(NSObject *obj in array) {NSLog(@"数组对象: %@",obj);}[array replaceObjectAtIndex:2 withObject:@"被替换的对象"];for(NSObject *obj in array) {NSLog(@"数组对象: %@",obj);}
}2016-10-10 11:19:17.050666 ArrayDemo[17200:1366118] 数组对象: 1
2016-10-10 11:19:17.050679 ArrayDemo[17200:1366118] 数组对象: 2
2016-10-10 11:19:17.050689 ArrayDemo[17200:1366118] 数组对象: 3
2016-10-10 11:19:17.050700 ArrayDemo[17200:1366118] 数组对象: 4
2016-10-10 11:19:17.050724 ArrayDemo[17200:1366118] 数组对象: <NSObject: 0x1004001d0>2016-10-10 11:19:17.050737 ArrayDemo[17200:1366118] 数组对象: 1
2016-10-10 11:19:17.050747 ArrayDemo[17200:1366118] 数组对象: 2
2016-10-10 11:19:17.050758 ArrayDemo[17200:1366118] 数组对象: 被替换的对象
2016-10-10 11:19:17.050769 ArrayDemo[17200:1366118] 数组对象: 4
2016-10-10 11:19:17.050813 ArrayDemo[17200:1366118] 数组对象: <NSObject: 0x1004001d0>

数组迭代的遍历方法

void doIterator() {NSObject *object = [[NSObject alloc] init];NSMutableArray *array = [NSMutableArray arrayWithCapacity:5];[array addObject:@"1"];[array addObject:@"2"];[array addObject:@"3"];[array addObject:@"4"];[array addObject:object];NSEnumerator *enumearator = [array objectEnumerator];id obj;while(obj = [enumearator nextObject]) {NSLog(@"数组对象: %@",obj);}
}2016-10-10 11:19:17.051273 ArrayDemo[17200:1366118] 数组对象: 1
2016-10-10 11:19:17.051300 ArrayDemo[17200:1366118] 数组对象: 2
2016-10-10 11:19:17.051368 ArrayDemo[17200:1366118] 数组对象: 3
2016-10-10 11:19:17.051425 ArrayDemo[17200:1366118] 数组对象: 4
2016-10-10 11:19:17.051491 ArrayDemo[17200:1366118] 数组对象: <NSObject: 0x1004001d0>

Objective-C之数组相关推荐

  1. 269道各路算法考试题集锦

    1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...

  2. 【iOS 开发】Objective-C 运算符

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613 参考文章 : 1.[iOS 开发]Object-C 运算符 2.[iO ...

  3. Objective C ARC 使用及原理

    Objective C ARC 使用及原理 手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档 ...

  4. js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值

    js合并同类数组里面的对象 This is Part I of the two-part series dedicated to estimating customer lifetime value. ...

  5. Objective C运行时(runtime)技术总结,好强大的runtime

    前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...

  6. #从零开始学Swift2.0# No.4 枚举, 元组, 数组和字典

    我的博客地址: sunquan.club 代码Github地址:https://github.com/developerSunquan/SwiftStudyNotes 枚举 枚举在Swift中可谓得到 ...

  7. php 对象转数组_PHP的垃圾回收机制-PHP高级面试题+详解

    八重樱:面试10家公司,收获9个offer,2020年PHP 面试问题​zhuanlan.zhihu.com ps:本篇内容包括精选面试题与知识篇. PHP面试题关于PHP的垃圾回收机制,PHP的垃圾 ...

  8. IOS数组按中文关键字以字母序排序

    本文转载至 http://blog.csdn.net/xunyn/article/details/7882087 iosobjective cuser框架通讯 IOS项目中会用到对通讯录的联系人或是会 ...

  9. nsarray数组越界_NSArray,NSMutableArray –目标C数组

    nsarray数组越界 NSArray and NSMutableArray are the Objective C array objects. In this tutorial we'll dis ...

  10. Swift 学习总结三:数组,字典,枚举,闭包, 函数

    数组 ///创建数组//创建某一类型的含有n个初始元素的数组var array1 = [Int](repeating: 5, count: 3)//创建某一类型空数组var array2 = [Int ...

最新文章

  1. Ajax Toolkit 控件学习系列(13) ——FilteredTextBoxExtender 控制输入
  2. 河北工程大学科信学院计算机二级,河北工程大学科信学院计算机科学与技术专业...
  3. php5.6 交叉编译,Cross-compile - 龙芯开源社区
  4. mvc EF 从数据库更新实体,添加视图实体时添加不上的问题
  5. .NET多线程总结和实例介绍
  6. vc mysql 图片_VC连接MySQL
  7. win7台式电脑怎么连wifi_台式电脑怎么用wifi网络
  8. long 转为string_面试必问 Redis数据结构底层原理String、List篇
  9. golang atomic load 性能_设计模式之Golang单例模式
  10. 使用 JWT 来保护你的 SpringBoot 应用
  11. RPLIDAR A1激光雷达学习笔记
  12. 计算机网络双绞线实验报告
  13. 如何通过关键字和搜索结果分析用户需求
  14. html中写jq,在jQuery中,能够操作HTML代码及其文本的方法是()
  15. 空间计量 python_空间计量经济学与Stata实现
  16. iOS逆向 开发工具
  17. 如何成为用户真正需要的短信验证平台
  18. (2011-12-28 旧博文搬运)闪耀十字军(ティンクル☆くるせいだーす)【3】
  19. 当贝X3对比明基I750哪个值得看,当贝X3功能丰富值得选
  20. cesium + kriging.js动态生成克里金图

热门文章

  1. centos安装最新版的docker-ce(二进制安装)
  2. -bash-4.1问题
  3. 【原】web服务器占有量统计等 web网站
  4. Servlet Filter
  5. 流媒体技术的应用与发展前景
  6. Java之transient关键字
  7. 黑客攻防技术宝典Web实战篇第2版—第3章 Web应用程序技术
  8. MYSQL 5.7 INNODB 表空间
  9. Dubbo(十一)dubbo的超时重试配置以及启动检查
  10. CopyOnWriteArrayList原理及算法题存档