忙了一上午,解决了几个bug,现在终于抽出来一点时间喝点水休息下, 想着系列这么浩大的一个工程,才刚刚开始写,不能断了,就跟写小说一样,既然是系列,那么就需要不停更... 好吧. 简单的说说iOS开发中的数组-NSArray

首先 OC的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。 类似于之前说的字符串一样,OC的数组也有两种,可变数组和不可变数组 一步一步来, 首先是NSArray的创建 我们可以从NSArray的类里面看到很多类方法的创建和实例方法的创建

@interface NSArray<ObjectType> (NSArrayCreation)

+ (instancetype)array;
+ (instancetype)arrayWithObject:(ObjectType)anObject;
+ (instancetype)arrayWithObjects:(const ObjectType [])objects count:(NSUInteger)cnt;
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array; - (instancetype)initWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag; + (nullable NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path;
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfURL:(NSURL *)url;
- (nullable NSArray<ObjectType> *)initWithContentsOfFile:(NSString *)path;
- (nullable NSArray<ObjectType> *)initWithContentsOfURL:(NSURL *)url; @end
复制代码 我们仿照着之前NSString的方式,随便列举一些例子看看, //init
NSArray *arr1 = [[NSArray alloc]init];
NSLog(@"%@",arr1); //array
NSArray *arr2 = [NSArray array];
NSLog(@"%@",arr2); //arrayWithObject
NSArray *arr3 = [NSArray arrayWithObject:@"arr3"];
NSLog(@"%@",arr3); //arrayWithObjects:
NSArray *arr4 = [NSArray arrayWithObjects:@"arr4",@"arr4", nil];
NSLog(@"%@",arr4); NSArray *arr5 = @[@"arr5",@"arr5",@"arr5",@"arr5",@"arr5"];
NSLog(@"%@",arr5); //initWithObjects:
NSArray *arr6 = [[NSArray alloc]initWithObjects:@"arr6",@"arr6", nil];
NSLog(@"%@",arr6); //arrayWithArray:
NSArray *arr7 = [NSArray arrayWithArray:arr6];
NSLog(@"%@",arr7); 当然创建的方式不单单这些,比如从文件里面读取数组,网络访问返回的数组... 这些都在具体的例子中再对应创建... 接下来再说说NSArray的一些常用方法. //常用方法
//count (读取数组元素个数)
NSLog(@"%ld",[arr7 count]); //objectAtIndex: (读取下标对应的元素,,,也可以用[] C的方式直接读取)
NSLog(@"%@,%@",[arr7 objectAtIndex:],arr7[]); //arrayByAddingObject: (追加一个元素,返回新的数组)
NSArray *arr8 = [arr7 arrayByAddingObject:@"arr8"];
NSLog(@"%@",arr8); //arrayByAddingObjectsFromArray: (追加多个元素,返回新的数组)
NSArray *arr9 = [arr8 arrayByAddingObjectsFromArray:arr7];
NSLog(@"%@",arr9); //componentsJoinedByString: (使用某字符串合并数组元素成一个新的字符串)
NSLog(@"%@",[arr9 componentsJoinedByString:@"-"]); //containsObject: (数组中是否有某元素)
NSLog(@"%d",[arr9 containsObject:@"arr9"]); //indexOfObject (某元素对应的下标)
NSLog(@"%ld",[arr9 indexOfObject:@"arr8"]); //indexOfObject:inRange: (对应范围内的某元素的下标)
NSLog(@"%ld",[arr9 indexOfObject:@"arr8" inRange:NSMakeRange(, arr9.count)]); //isEqualToArray: (两个数组是否相等)
NSLog(@"%d",[arr9 isEqualToArray:arr8]); //firstObject (第一个元素)
NSLog(@"%@",[arr9 firstObject]); //lastObject (最后一个元素)
NSLog(@"%@",[arr9 lastObject]); //objectsAtIndexes (对应的多个下标的多个元素)
NSLog(@"%@",[arr9 objectsAtIndexes:[NSIndexSet indexSetWithIndex:]]); //数组遍历
//for循环
for (int i = ; i<arr9.count; i++) {
NSLog(@"%@",arr9[i]);
} //for in
for (id obj in arr9) {
NSLog(@"%@",obj);
} //迭代器
NSEnumerator *enumerator = [arr9 objectEnumerator];
id obj = nil;
while(obj = [enumerator nextObject]){
NSLog(@"%@",obj);
} //block
[arr9 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%ld-%@",idx,obj);
//若终断循环
//*stop = YES;
}]; 当然以上的方法都是一些基础的方法,经常会在项目中使用的方法..还有些不常用的和系统没有提供的需要在平时开发中再做积累, 当然我刚刚也说了数组的遍历,上面也举例了几个,后期我会单独对其进行分析,比较各自的优缺点和性能.这里暂不描述 接下来学习的是NSArray的子类 可变数组NSMutableArray 还是类似的学习方式,创建+常用方法 首先是创建 //init
NSMutableArray *arr10 = [[NSMutableArray alloc]init];
NSLog(@"%@",arr10); //array
NSMutableArray *arr11 = [NSMutableArray array];
NSLog(@"%@",arr11); //arrayWithCapacity: (创建初始长度为多少的数组,但因为其实可变数组,所以即使长度不够什么的,也没有关系,比如可以设0)
NSMutableArray *arr12 = [NSMutableArray arrayWithCapacity:];
NSLog(@"%@",arr12); //initWithCapacity:
NSMutableArray *arr13 = [[NSMutableArray alloc]initWithCapacity:];
NSLog(@"%@",arr13);
复制代码 当然因为其作为NSArray的子类,所以NSArray创建的方式,它也都有 这里就不一一举例了 常用方法: //addObject: (添加一个元素)
[arr13 addObject:@"arr13"];
NSLog(@"%@",arr13); //addObjectsFromArray: (添加一组元素)
[arr13 addObjectsFromArray:arr9];
NSLog(@"%@",arr13); //insertObject:atIndex (在某下标插入某一个元素)
[arr13 insertObject:@"arr" atIndex:];
NSLog(@"%@",arr13); //removeLastObject (删除最后一个元素)
[arr13 removeLastObject];
NSLog(@"%@",arr13); //removeObjectAtIndex: (删除某下标对应的元素)
[arr13 removeObjectAtIndex:];
NSLog(@"%@",arr13); //replaceObjectAtIndex:withObject (替换某下标的元素)
[arr13 replaceObjectAtIndex: withObject:@"index"];
NSLog(@"%@",arr13); //exchangeObjectAtIndex:withObjectAtIndex: (替换两个下标对应元素)
[arr13 exchangeObjectAtIndex: withObjectAtIndex:];
NSLog(@"%@",arr13); //removeAllObjects (移除所有元素)
[arr13 removeAllObjects];
NSLog(@"%@",arr13); [arr13 addObjectsFromArray:arr9]; //removeObject:inRange: (移除某范围内指定元素)
[arr13 removeObject:@"arr" inRange:NSMakeRange(, )];
NSLog(@"%@",arr13); //removeObject: (移除指定元素)
[arr13 removeObject:@"arr8"];
NSLog(@"%@",arr13); //removeObjectsInArray: (删除某数组内存在的元素)
[arr13 removeObjectsInArray:arr7];
NSLog(@"%@",arr13); //removeObjectsInRange: (删除指定范围内的元素)
[arr13 removeObjectsInRange:NSMakeRange(, )];
NSLog(@"%@",arr13); //setArray: (设置数组元素)
[arr13 setArray:arr9]; //sortUsingSelector: (排序)
[arr13 sortUsingSelector:@selector(compare:)]; 当然还是一样的,凡是NSAarray的方法,NSMutableArray也都是支持的,方法很多有很多没有,需要在开发中自己积累,当然百度,谷歌...也都是方法的来源.... 常用方法基本就是这些,其实复杂的,特殊需求的方法绝大多数也是基于这些演变而来... 至于上面也有说道排序, 大家都学过C语言,肯定都能脱口而出冒泡\选择\插入... 当然OC中也是有排序的方法的,sortUsingSelector: sortUsingComparator:等等,后续也会单独举例... 今天就到这里.. 接下来讲的是key-value 也就是OC中的NSDictionary... 我想大家也都知道了 可变,不可变..... Demo地址:github.com/spicyShrimp…

iOS开发-NSArray的更多相关文章

  1. iOS开发——NSArray中的字典排序

    手头上碰到一个项目,需要给数组中的字典中的一个字段排序,想了想,干脆再字典中增加一个字段,用来记录需要排序字段的第一个字符,用它来作为比较的对象,进行排序. - (void)viewDidLoad { ...

  2. iOS开发——NSArray中的字符串排序

     NSArray *arr = @[@"fjhsf",@"wert",@"fdg",@"asd",@"fs g ...

  3. iOS开发 NSArray技巧

    sh数组快速倒序 NSArray *arr = @[@"first",@"second"]; arr = arr.reverseObjectEnumerator ...

  4. iOS开发系列--打造自己的“美图秀秀”

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  5. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  6. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  7. iOS开发系列--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  8. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  9. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

随机推荐

  1. Oracle中复制表的方法(create as select、insert into select、select into)

    转: Oracle中复制表的方法(create as select.insert into select.select into) 2018-07-30 22:10:37 小白白白又白cdllp 阅读 ...

  2. 【PHP】php7.2报错The each() function is deprecated. This message will be suppressed on furthe

    php7.2以上 废除了 each()方法,项目中用到的地方会出现以下报错 The each() function is deprecated. This message will be suppre ...

  3. WebGL高级编程:开发Web3D图形 PDF(中文版带书签)

    WebGL高级编程:开发Web3D图形 目录 WebGL简介11.1 WebGL基础11.2 浏览器3D图形吸引人的原因21.3 设计一个图形API31.3.1 即时模式API31.3.2 保留模式A ...

  4. How to Plan and Configure YARN and MapReduce 2 in HDP 2.0

    As part of HDP 2.0 Beta, YARN takes the resource management capabilities that were in MapReduce and ...

  5. Python - Django - 静态文件相关

    静态文件的路径设置在 settings.py 中 如果该路径发生更改的话,html 中相关路径也要进行修改 CSS: <link href="/static/dashboard.css ...

  6. Cas(05)——修改Cas Server的其它配置

    修改Cas Server的其它配置 目录 1.1      修改host.name 1.2      修改SSO Session的超时策略 1.3      修改允许管理service的角色 1.4  ...

  7. RobotFramework:查询条件为最近一个月的数据(2019-07-09 00:00:00.000 到 2019-08-07 23:59:59.999)

    自动化测试中遇到,默认查询条件为最近一个月,所以起始时间就应该为(2019-07-09 00:00:00.000 到  2019-08-07 23:59:59.999) test ${current_ ...

  8. 【GStreamer开发】GStreamer基础教程11——调试工具

    目标 有时我们的应用并没有按照我们的预期来工作,并且在总线上获得的错误信息也没有足够的内容.这时我们该怎么办呢?幸运的时,GStreamer自身提供了大量的调试信息,通常这些信息会给出一些线索,指向出 ...

  9. Swoole练习 websocket

    WEBSOCKET 服务端代码 //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0& ...

  10. linux CentOS7 安装字体库-转

    前言 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体库 ...