热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ObjectiveCFoundation之NSArray/NSMutableArrray

Objective-C中除了可以使用C中的基本数组外,如int[5],charword[]{‘a’,’b’,’c’};Foundation还提供了NSArray类,其有如下特点:。

Objective-C 中除了可以使用 C 中的基本数组外,如 int[5],char word[] ={‘a’,’b’,’c’};Foundation 还提供了 NSArray 类,其有如下特点:。

(1)NSArray 是有序的对象集合。
(2)NSArray 保存的对象可以是不同的对象。
(3)int ,char,double 等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。 例如下面的代码在运行时会报错:

NSArray *arr = [[NSArray alloc] initWithObjects:@"abc",@"123",456, nil];
NSLog(@"%@", arr);

《Objective-C Foundation 之NSArray/NSMutableArrray》

就像 NSString 和 NSMutableString 一样,同样也存在可变数组和不可变数组.不可变数组是由 NSArray 类处理的, 而可变数组则是由 NSMutableArrray 处理的.后者是前者的子类,也就是说 NSMutableArrray 继承了 NSArray 的方 法.

NSArray不可变数组

使用 NSArray 关键字创建一个不可变的数组,一旦初始化完毕后这个数组的元素是不可以在动态的添加与删除。 例如:

int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个包含星期的数组
NSArray *days = [NSArray arrayWithObjects:@"SUN", @"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];
//获取数组所包含对象个数
NSLog(@"size of days:%ld",(unsigned long)[days count]);
//循环打印数组中的元素,比较普遍,但效率不高
for (int i=0; i<[days count]; i++) {
NSLog(@"%@",[days objectAtIndex:i]);
}
//size of days:7
//另一种方法打印数组中的元素,效率高,推荐使用
for(id day in days){
NSLog(@"%@",day); }
}
return 0;
}

对于数组创建,编译器为了减少代码量,提供了更简便方法,比如:

NSArray *days = [NSArray arrayWithObjects:@"SUN", @"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];

等价于:

NSArray *days =
@[@"SUN","MON","TUE","WED","THU","FRI","SAT"];

创建多维

NSArray: NSArray *days = @{
@{@”sum,@”mon”,@”tue”,@”wed”}, @{@”sum,@”mon”,@”tue”,@”fri”} @ { @ ” f r i , @ ” m o n ”, @ ” t u e ”, @ ”s a t ” } @{@”sat,@”mon”,@”tue”,@”wed”}
}

NSArray 的类方法 arrayWithObjects:使用一列对象作为元素创建数组,这种情况下需要按顺序列出对象并使用逗号隔开。将这个数组的最后一个值指定为 nil,标记参数数组的结束.它实际上并不会存储在数组中.

[array count] : 得到这个数组对象的长度。
[array objectAtIndex index]: 传入数组的索引(index) 得到数据对象。
[arrayWithObjects: &#8230;] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用 nil,以标志结束.
+(id)arrayWithObjects:obj1,obj2,&#8230;nil 创建一个新的数组,obj1,obj2&#8230;&#8230;是他的元素对象,以 nil 对象结尾
-(BOOL)containsObject:obj确定数组中是否包含对象 obj
-(NSUInteger)count 返回数组元素个数
-(NSUInteger)indexOfObject:obj 第一个包含 obj 元素的索引号
-(id)objectAtIndex;i 返回存储在位置 i 的对象
-(void)makeObjectsPerformSelector:(SEL)selector 将 selector 只是的消息发送给数组中的每个元素
-(NSArray*)sortedArrayUsingSelector:(SEL)selector 根据 selector 指示的比较方法对数组进行排序,比如:

NSArray * array = @[@"b",@"d",@"a",@"z"];
array = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"排序后 array %@",array);

-(BOOL)writeToFile:path atomically:(BOOL)flag 将数组写入指定的文件中,如果 flag 为 YES,则需要先创建一个 临时文件

MSMutableArray 可变数组

大多时候我们需要动态的增加和删除数组中的元素,这就需要使用 MSMutableArray。例如:

int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个空数组
NSMutableArray *arrs = [NSMutableArray array];
//C 中的一些基本元素我们可以用 NSNumber 类来包装,类似 java 中的装箱,另外还有一些 struct 类 型的数据我们也可以用 NSNumber 类的父类 NSValue 来进行包装,包装成 NSValue 的对象再将其放入数组中。
int age=23;
char c='a';
float f=3.1415926;
NSRect rect =NSMakeRect(1, 2, 3, 4);
NSNumber *objAge = [NSNumber numberWithInt:age];
NSNumber *objC =[NSNumber numberWithChar:c];
NSNumber *objF =[NSNumber numberWithFloat:f];
NSValue *objRect = [NSValue valueWithRect:rect];
[arrs addObject:objAge];
[arrs addObject:objC];
[arrs addObject:objF];
[arrs addObject:objRect];
//如果要添加空的话可以用以下方法
[arrs addObject:[NSNull null]];
NSLog(@"Size of arrs: %li",(unsigned long)[arrs count]); //Size of arrs: 5 NSLog(@"%@",arrs);
//创建一个指定初始容量的数组
NSMutableArray *arrs2 = [NSMutableArray arrayWithCapacity:3];
//指定初始容量为 3,但我们添加了 5 个对象
[arrs2 addObject:@"obj1"];
[arrs2 addObject:@"obj2"];
[arrs2 addObject:@"obj3"];
[arrs2 addObject:@"obj4"];
[arrs2 addObject:@"obj5"];
//将对象 obj 插入到索引为 i 的位置
[arrs2 insertObject:@"obj" atIndex:0];
//删除指定索引处的对象
[arrs2 removeObjectAtIndex:3];
//遍历数组
for(id obj in arrs2)
{
NSLog(@"%@",obj);
//obj,obj1,obj2,obj4,obj5
}
//合并字符串数组
NSString *str = [arrs2 componentsJoinedByString:@"|"]; NSLog(@"%@",str); //obj|obj1|obj2|obj4|obj5
//字符串切割成数组
NSArray *arr3=[str componentsSeparatedByString:@"|"]; NSLog(@"%@",arr3);
}
return 0; }

NSMutableArray 类常用方法
array 创建一个空数组
+(id)arrayWithCapacity:size 创建一个数组,指定容量为size
-(id)initWithCapacity:size 初始化一个新分配的数组,指定容量为size
-(void)addObject:obj 将对象 obj 添加到数组末尾
-(void)insertObject:obj atIndex:i 将对象 obj 插入到索引为 i 的位置
-(void)replaceObject:obj atIndex:i 将数组中索引为 i 处的元素用 obj 置换
-(void)removeObject:obj 从数组中删除所有是 obj 的对象
-(void)removeObjectAtIndex:i 从数组中删除索引为 i 的对像
-(void)sortUsingSelector:(SEL)selector 用 selector 只是的比较方法将数组排序


推荐阅读
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
author-avatar
喵喵-浩_174
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有