Objective-C(十一、不可变数组NSArray,可变数组NSMutableArray)——iOS开发基础
来源:互联网 发布:手机转账软件下载 编辑:程序博客网 时间:2024/06/10 12:48
结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
十一、不可变数组NSArray,可变数组NSMutableArray
注意:下面的所提及的方法都是常用方法,全部列出不大现实,参考Xcode帮助文档即可~
1、NSArray:不可变数组
(1)基本知识
a、元素索引与C语言一样从0开始;
b、数组可以存放不同类的对象也可以存放同一类的对象;(C只能同类型)
c、只能存放OC对象,不能存放非OC对象(int,double,enum,struct等),不能存放nil,nil被用于标识数组的结束;
d、不可变数组,一旦创建,不能添加、删除或修改其中的元素;
(2)NSArray的生成和初始化
较常见的方法:
MusicPlayer *player = [[MusicPlayer alloc] init]; NSArray *array1 = [NSArray array]; //创建空数组,一般在可变数组中用的多; NSArray *array2 = [NSArray arrayWithObject:@"obj1"]; //创建一个元素 NSArray *array3 = [NSArray arrayWithObjects:@1,@"obj2",player, nil]; //创建多个元素,nil表数组结束 NSArray *array4 = [NSArray arrayWithArray:array3]; //利用已有数组来返回一个新的数组 NSArray *arrayNew = @[@"obj1",@2,player]; //编译器新特征,Xcode4.4以后的新语法,不用以nil结尾 NSLog(@"%@",array4); //会调用description方法,把数组中的各个元素打印出来
output:
( 1, obj2, "<MusicPlayer: 0x100206850>" )
(2)访问数组元素
- (NSUInteger)count; //返回数组元素个数 - (NSUInteger)indexOfObject:(id)anObject; //找到与anObject相等的元素,返回元素位置,否则返回NSNotFound - (BOOL)containsObject:(id)anObject; //是否包含anObject元素 - (id)lastObject; //返回数组最后一个元素,若接受者为空,返回nil - (id)objectAtIndex:(NSUInteger)index; //返回index位置的元素,若index超过数组长度,会触发异常NSRangeException - (NSArray *)subarrayWithRange:(NSRange)range; //抽取原数组一部分生成新数组
//新语法,类似C语言数组形式 直接用array[0]的形式访问第一个元素,下标0开始计数 NSLog(@"%lu",[array4 count]); if ([array4 indexOfObject:@1] != NSNotFound) { NSLog(@"元素序列为:%lu",[array4 indexOfObject:@1]); } else { NSLog(@"没找到"); } if ([array4 containsObject:@"obj2"]) { NSLog(@"包含该元素"); } else { NSLog(@"不包含该元素"); } NSLog(@"%@",[array4 lastObject]); NSLog(@"%@",[array4 objectAtIndex:1]); NSLog(@"数组第二个元素是:%@",array4[1]);
output:
3 元素序列为:0 包含该元素 <MusicPlayer: 0x100113db0> obj2 数组第二个元素是:obj2
(3)比较
- (BOOL)isEqualToArray:(NSArray *)otherArray; //元素个数相同且相同索引位置的元素也要相等才返回YES - (id)firstObjectCommonWithArray:(NSArray *)otherArray; //返回两数组第一个相同的元素,无相同,返回nil
(4)为数组添加元素
- (NSArray *)arrayByAddingObject:(id)anObject; //返回新数组,anObject加在后面 - (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray; //返回新数组,otherArray加在后面
(5)字符串与数组
//字符串分割的结果保存在数组中NSString *str = @"111-222-333";NSArray *array5 = [str componentsSeparatedByString:@"-"];NSLog(@"%@", array5);
output:
( 111, 222, 333 )
- (NSString *)componentsJoinedByString:(NSString *)separator; //返回一个临时字符串,字符串以@"separator"的内容连接数组每个元素执行description的结果
NSLog(@"%@",[array4 componentsJoinedByString:@"!!!"]);
output:
1!!!obj2!!!<MusicPlayer: 0x100111b10>
(6)关于数组的内容方法还有很多,列举不完的,所以这里只是列举部分常见常用的方法。
2、NSMutableArray:可变数组
(1)基本知识
a、NSMutableArray是NSArray的子类,NSArray的所有方法都可以用;
b、可变数组,存储空间是动态的,可以随意添加或删除其中的元素
(2)可变数组的初始化
可以指定初始化一个长度为numItems的可变数组,也可以使用array方法创建长度为0的可变数组,而后添加。
+ (instancetype)arrayWithCapacity:(NSUInteger)numItems; //便利构造器 NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:5];
- (instancetype)initWithCapacity:(NSUInteger)numItems NS_DESIGNATED_INITIALIZER; NSMutableArray *mutableArray1 = [[NSMutableArray alloc] initWithCapacity:5];
(3)追加或替换元素
追加
- (void)addObject:(id)anObject; //添加anObject元素在数组末尾,不可为nil - (void)addObjectsFromArray:(NSArray *)otherArray; //将otherArray的元素添加到数组的末尾 - (void)insertObject:(id)anObject atIndex:(NSUInteger)index; //将anObject添加到index位置,后面的元素顺次后移,index必须在0和数组范围之间
替换
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; //用anObject替换在index的元素,index超过数组范围,返回NSRangeException - (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray; //使用otherArray的元素替换当前数组range返回的元素 - (void)setArray:(NSArray *)otherArray; //用otherArray的元素替换当前数组的所有元素,当前数组的所有元素都被删除 - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; //交换idx1和idx2位置的元素
(4)删除数组中的额元素
- (void)removeAllObjects; //数组置空 - (void)removeLastObject; //删除数组最后一个元素 - (void)removeObjectAtIndex:(NSUInteger)index; //删除index位置上的元素 - (void)removeObjectsInRange:(NSRange)range; //删除range范围的元素 - (void)removeObject:(id)anObject; //删除数组中所有与anObject相等的元素 - (void)removeObjectsInArray:(NSArray *)otherArray; //从当前数组中删除otherArray数组中包含的所有元素
0 0
- Objective-C(十一、不可变数组NSArray,可变数组NSMutableArray)——iOS开发基础
- iOS开发学习第十七课——NSArray(不可变数组) 和 NSMutableArray(不可变数组)
- 黑马程序员———Objctive-C———【NSArray不可变数组、NSMutableArray可变数组】
- 黑马程序员——Objective-C学习之不可变与可变集合(NSArray\NSMutableArray)
- 不可变数组NSArray和可变数组NSMutableArray
- 不可变数组(NSArray)与可变数组(NSMutableArray)
- 不可变数组NSArray与可变数组NSMutableArray
- ios可变数组NSMutableArray和不可变数组NSArray的区别
- 数组的常用方法(不可变:NSArray, 可变:NSMutableArray)
- Objective-c 之数组NSArray 可变数组NSMutableArray
- Objective-C语法-数组NSArray和可变数组NSMutableArray
- NSArray 不可变数组-Objective-C
- iOS objective-c之-8:数组NSArray 可变数组-(NSMutableArray)
- iOS objective-c之-8:数组NSArray 可变数组-NSMutableArray
- OC 中的数组方法(不可变数组NSArray 和 可变数组 NSMutableArray)
- 不可变数组NSArray和可变数组
- 不可变数组NSArray和可变数组NSMutableArray区别和用法
- OC语言 集合>>不可变数组(NSArray) 与 可变数组(NSMutableArray)
- JavaSE笔记之<正则表达式>
- 《C语言及程序设计》实践参考——区号查询
- vc6.0调试程序常用快捷键和MFC中做宏代换的技巧
- uva1339(字符串水题)
- 默认参数提升在可变参数函数的陷阱
- Objective-C(十一、不可变数组NSArray,可变数组NSMutableArray)——iOS开发基础
- response输出乱码问题
- 优化结构体中元素布局
- 客户端putty, xshell连接linux中vim的小键盘问题
- 【视图控件篇】自定义Android控件之IOS滑动开关模拟详解
- 大话设计模式之UML
- hihocoder #1039 : 字符消除
- there is no action mapped by xxx
- 多线程--生产者和消费者