忙了一上午,解决了几个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. stl中map的四种插入方法总结

    stl中map的四种插入方法总结方法一:pair例:map<int, string> mp;mp.insert(pair<int,string>(1,"aaaaa&q ...

  2. Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

    现在可以访问我们的认证服务器,应用我们已经配置好了. 下面配置让用户可以访问我的认证服务器.再来重写一个方法. EndpointConfigure端点的配置. authenticationManage ...

  3. Tools - Summary List

    通用 PicPick:https://picpick.app/zh/ Q-Dir:http://www.softwareok.com/?Download=Q-Dir 7-Zip:https://www ...

  4. 【计算机视觉】车牌识别开源框架EasyPR介绍

    之前学习了一个GitHub开源的框架,GitHub地址为: https://github.com/liuruoze/EasyPR  希望通过此篇博客详细阐述如何一步步实现车牌的识别过程.  车牌识别分 ...

  5. 最新 博盾习言java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 博盾习言等10家互联网公司的校招Offer,因为某些自身原因最终选择了 博盾习言.6.7月主要是做系统复习.项目复盘.Le ...

  6. 超类Object

    Object:是类层次结构中的跟类,所有类都直接货间接继承自该类 如果一个方法的形参是Object,那么这里我们就可以传递它的任意的子类对象,相当于传任何数据类型都可以 toString()——返回地 ...

  7. 工具中修改设置Default VM Arguments

    转自:https://www.cnblogs.com/zouhao/p/6513177.html

  8. [转帖]Java 2019 生态圈使用报告,这结果你赞同吗?

    Java 2019 生态圈使用报告,这结果你赞同吗? http://www.51testing.com/html/94/n-4462794.html 发表于:2019-10-15 17:10  作者: ...

  9. Python 模块初始化的时候,发生了什么?

    假设有一个 hello.py 的模块,当我们从别的模块调用 hello.py 的时候,会发生什么呢? 方便起见,我们之间在 hello.py 的目录下使用 ipython 导入了. hello.py ...

  10. Java中的事务及使用

    什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如S ...