NSArray是用来存储对象的有序列表(NSSet是没有顺序的),它是不可变的。NSArray不能存储C语言中的基本数据类型,如int\float\enum\struct等,也不能存储nil。其用法如下:

  1. #pragma mark 创建一个数组
  2. void arrayCreate() {
  3. // 创建一个空的数组
  4. NSArray *array = [NSArray array];
  5.  
  6. // 创建有1个元素的数组
  7. array = [NSArray arrayWithObject:@""];
  8.  
  9. // 创建有多个元素的数组
  10. array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
  11.  
  12. int count = [array count];
  13. // count = array.count;
  14. NSLog(@"%i", count);
  15. }
  16.  
  17. #pragma mark 数组的简单使用
  18. void arrayUse() {
  19. NSObject *obj = [[NSObject alloc] init];
  20. NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c" , obj, nil];
  21. // 判断是否包含了某个元素
  22. if ([array containsObject:@"a"]) {
  23. NSLog(@"包含了字符串a");
  24. }
  25.  
  26. NSString *last = [array lastObject];
  27. NSLog(@"last=%@", last);
  28.  
  29. NSString *str = [array objectAtIndex:];
  30. NSLog(@"%@", str);
  31.  
  32. int index = [array indexOfObject:@"c"];
  33. NSLog(@"index=%i", index);
  34.  
  35. [obj release];
  36. }
  37.  
  38. #pragma mark 数组的内存管理
  39. void arrayMemory() {
  40. //
  41. Student *stu1 = [[Student alloc] init];
  42. Student *stu2 = [[Student alloc] init];
  43. Student *stu3 = [[Student alloc] init];
  44.  
  45. NSLog(@"stu1:%zi", [stu1 retainCount]);
  46.  
  47. // 当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对它做一次retain操作
  48. //
  49. NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
  50.  
  51. NSLog(@"stu1:%zi", [stu1 retainCount]);
  52.  
  53. NSLog(@"count=%zi", array.count);
  54.  
  55. //
  56. [stu1 release];
  57. [stu2 release];
  58. [stu3 release];
  59.  
  60. // 数组被销毁的时候,会对内部的所有元素都做一次release操作
  61. //
  62. [array release];
  63. }
  64.  
  65. #pragma mark 给数组里面的元素发送消息
  66. void arrayMessage() {
  67. Student *stu1 = [Student student];
  68. Student *stu2 = [Student student];
  69. Student *stu3 = [Student student];
  70.  
  71. NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
  72. // 让数组里面的所有对象都调用test方法
  73. // [array makeObjectsPerformSelector:@selector(test)];
  74. [array makeObjectsPerformSelector:@selector(test2:) withObject:@""];
  75. }
  76.  
  77. #pragma mark 遍历数组1
  78. void arrayFor1() {
  79. Student *stu1 = [Student student];
  80. NSArray *array = [NSArray arrayWithObjects:stu1, @"", @"", @"", nil];
  81. int count = array.count;
  82. for (int i = ; i<count; i++) {
  83. // id == void *
  84. id obj = [array objectAtIndex:i];
  85. NSLog(@"%i-%@", i, obj);
  86. }
  87. }
  88.  
  89. #pragma mark 遍历数组2
  90. void arrayFor2() {
  91. Student *stu1 = [Student student];
  92. NSArray *array = [NSArray arrayWithObjects:stu1, @"", @"", @"", nil];
  93. // 快速遍历
  94. int i =;
  95. for (id obj in array) {
  96. NSLog(@"%i-%@", i, obj);
  97. i++;
  98. }
  99. }
  100.  
  101. #pragma mark 遍历数组3
  102. void arrayFor3() {
  103. Student *stu1 = [Student student];
  104. NSArray *array = [NSArray arrayWithObjects:stu1, @"", @"", @"", nil];
  105. [array enumerateObjectsUsingBlock:
  106. ^(id obj, NSUInteger idx, BOOL *stop) {
  107. NSLog(@"%i-%@", idx, obj);
  108.  
  109. // 如果索引为1,就停止遍历
  110. if (idx == ) {
  111. // 利用指针修改外面BOOL变量的值
  112. *stop = YES;
  113. }
  114. }];
  115. }
  116.  
  117. #pragma mark 遍历数组4
  118. void arrayFor4() {
  119. Student *stu1 = [Student student];
  120. NSArray *array = [NSArray arrayWithObjects:stu1, @"", @"", @"", nil];
  121.  
  122. // 获取数组的迭代器
  123. // NSEnumerator *enumerator = [array objectEnumerator];
  124. // 反序迭代器(从尾部开始遍历元素)
  125. NSEnumerator *enumerator = [array reverseObjectEnumerator];
  126.  
  127. // allObjects是取出没有被遍历过的对象
  128. NSArray *array2 = [enumerator allObjects];
  129. NSLog(@"array2:%@", array2);
  130.  
  131. // 获取下一个需要遍历的元素
  132. id obj = nil;
  133. while (obj = [enumerator nextObject]) {
  134. NSLog(@"obj=%@", obj);
  135. }
  136. }
  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Book : NSObject
  4. @property (nonatomic, retain) NSString *name;
  5.  
  6. + (id)bookWithName:(NSString *)name;
  7. @end
  8.  
  9. #import "Book.h"
  10.  
  11. @implementation Book
  12.  
  13. + (id)bookWithName:(NSString *)name {
  14. Book *book = [[[Book alloc] init] autorelease];
  15. book.name = name;
  16. return book;
  17. }
  18.  
  19. - (void)dealloc {
  20. [_name release];
  21. [super dealloc];
  22. }
  23. @end
  1. #pragma mark 派生出新的数组
  2. void arrayNew() {
  3. NSArray *array = [NSArray arrayWithObjects:@"", @"", nil];
  4.  
  5. NSArray *array2 = [array arrayByAddingObject:@""];
  6.  
  7. NSArray *array3 = [array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"", @"", nil]];
  8.  
  9. NSLog(@"array:%@", array);
  10. NSLog(@"array2:%@", array2);
  11. NSLog(@"array3:%@", array3);
  12.  
  13. NSArray *array4 = [NSArray arrayWithObjects:@"", @"", @"", @"", nil];
  14. NSRange range = NSMakeRange(, );
  15. NSArray *array5 = [array4 subarrayWithRange:range];
  16. NSLog(@"array5:%@", array5);
  17. }
  18.  
  19. #pragma mark 数组的其他用法
  20. void arrayOther() {
  21. NSArray *array = [NSArray arrayWithObjects:@"", @"", @"", @"", nil];
  22. // 1-2-3-4
  23. // 利用分隔符-拼接所有的数组元素
  24. NSString *str = [array componentsJoinedByString:@"-"];
  25. NSLog(@"%@", str);
  26.  
  27. // 将一个数组写入文件(生成的是一个xml文件)
  28. NSString *path = @"/Users/apple/Desktop/array.xml";
  29. [array writeToFile:path atomically:YES];
  30.  
  31. path = @"/Users/apple/Desktop/array.txt";
  32. // 从文件中读取数组内容(文件有严格的格式要求)
  33. NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
  34. NSLog(@"array2:%@", array2);
  35. }
  36.  
  37. #pragma mark 数组排序1
  38. void arraySort1() {
  39. NSArray *array = [NSArray arrayWithObjects:@"", @"", @"", @"", nil];
  40.  
  41. // 返回一个排好序的数组,原来数组的元素顺序不会改变
  42. // 指定元素的比较方法:compare:
  43. NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
  44. NSLog(@"array2:%@", array2);
  45. }
  46.  
  47. #pragma mark 数组排序2
  48. void arraySort2() {
  49. Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
  50. Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
  51. Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
  52. Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
  53. NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
  54.  
  55. // 指定排序的比较方法
  56. NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];
  57.  
  58. NSLog(@"array2:%@", array2);
  59. }
  60.  
  61. #pragma mark 数组排序3
  62. void arraySort3() {
  63. Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
  64. Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
  65. Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
  66. Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
  67. NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
  68.  
  69. // 利用block进行排序
  70. NSArray *array2 = [array sortedArrayUsingComparator:
  71. ^NSComparisonResult(Student *obj1, Student *obj2) {
  72. // 先按照姓排序
  73. NSComparisonResult result = [obj1.lastname compare:obj2.lastname];
  74. // 如果有相同的姓,就比较名字
  75. if (result == NSOrderedSame) {
  76. result = [obj1.firstname compare:obj2.firstname];
  77. }
  78.  
  79. return result;
  80. }];
  81.  
  82. NSLog(@"array2:%@", array2);
  83. }
  84.  
  85. #pragma mark 数组排序4-高级排序
  86. void arraySort4() {
  87. Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li" bookName:@"book1"];
  88. Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang" bookName:@"book2"];
  89. Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li" bookName:@"book2"];
  90. Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao" bookName:@"book1"];
  91. NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
  92.  
  93. // 1.先按照书名进行排序
  94. // 这里的key写的是@property的名称
  95. NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];
  96. // 2.再按照姓进行排序
  97. NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];
  98. // 3.再按照名进行排序
  99. NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];
  100. // 按顺序添加排序描述器
  101. NSArray *descs = [NSArray arrayWithObjects:bookNameDesc, lastnameDesc, firstnameDesc, nil];
  102.  
  103. NSArray *array2 = [array sortedArrayUsingDescriptors:descs];
  104.  
  105. NSLog(@"array2:%@", array2);
  106. }

Objective-C:Foundation框架-常用类-NSArray的更多相关文章

  1. Objective-C:Foundation框架-常用类-NSString全解

    Foundation框架中常用的类有字符串.集合.字典等,这里介绍字符串NSString.本文分别介绍了NSString的创建.从文件里读取NSString字符串.通过函数改变外部的NSString变 ...

  2. Objective-C:Foundation框架-常用类-NSDictionary

    与NSString.NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary.其用法如下: #import <Foundation/Foun ...

  3. Objective-C:Foundation框架-常用类-NSObject

    NSObject是所有类的基类,其常见用法有: #import <Foundation/Foundation.h> @interface Person : NSObject - (void ...

  4. Objective-C:Foundation框架-常用类-NSNumber

    NSArray.NSDictionary是不可以存储C语言中的基本数据类型的.NSNumber可以将基本数据类型包装成对象,这样可以间接将基本数据类型存进NSArray.NSDictionary等集合 ...

  5. Objective-C:Foundation框架-常用类-NSMutableDictionary

    直接上代码吧: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, ...

  6. Objective-C:Foundation框架-常用类-NSMutableArray

    NSMutableArray是NSArray对的子类,它是可变的,可以随意添加或者删除元素.与Array,也有静态和动态两种创建方法.也可已使用NSArray的方法来创建NSMutableArray. ...

  7. Objective-C:Foundation框架-常用类-NSDate

    直接上代码吧: #import <Foundation/Foundation.h> #pragma mark 日期创建 void dateCreate() { // date方法返回的就是 ...

  8. Objective-C:Foundation框架-常用类-NSNull

    集合中是不能存储nil值的,因为nil在集合中有特殊含义,但有时确实需要存储一个表示“什么都没有”的值,那么可以使用NSNull,它也是NSObject的一个子类. #import <Found ...

  9. Objective-C:Foundation框架-常用类-NSValue

    NSNumber是NSValue的子类,前者只能包装数字,后者可以包装任意值.NSArray.NSDictionary只能存储OC对象,不能存储结构体.因此,如果想要在NSArray.NSDictio ...

随机推荐

  1. JAVA开发-我的第一个webScan扫描器

    写的第一句话就是感谢shack2,参考了他的代码知道原来有的解耦可以这样写,但是又在他的基础上改写了很多. 代码分享给大写,下面是程序的截图,我把他取名为:HadesWebScan   ps:Wind ...

  2. [资源] Resources on Self-Driving Car

    Talk NVIDIA at CES 2016 - Self Driving Cars and Deep Learning GPUs Projects Autoware Open-source sof ...

  3. OpenCV installation on Linux

    Getting the Cutting-edge OpenCV from the Git Repository Launch Git client and clone OpenCV repositor ...

  4. python_way day6 反射,正则 模块(进度条,hash)

    python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...

  5. yii 中引入js 和css 的方式

    在yii中 我们需要引入css 和 js 的时候,yii 自身有需要的类. 当我在views 视图层中引入css 和 js , <?php Yii::app()->clientScript ...

  6. fuel3.2安装

    http://software.mirantis.com/quick-start/ 准备环境用的ubuntu12.04,只需要一个网卡通外网 下载好相关的iso,img,iso放到相应的iso目录 编 ...

  7. oracle 查看锁表情况并处理锁表

    /* *locked *query locked object and analyse reason,kill it * */ select 'alter system kill session '' ...

  8. JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

    javaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  9. poj3304Segments(直线与多条线段相交)

    链接 枚举两点(端点),循环遍历与直线相交的线段. #include <iostream> #include<cstdio> #include<cstring> # ...

  10. mysql 占用的内存大小

    1.mysql执行查询计划,key_len表示索引使用的字节数,这个字节数和三个条件有关.mysql> create table t1(v1 char(10));Query OK, 0 rows ...