1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组。

2.NSArray的创建

NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];
//用对象初始化一个数组,这里是任意四个对象,不一定是字符串。
//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表明结尾。

3.NSArray的遍历打印

我们在C语言中,要打印一个数组,要使用循环进行输出,但是在OC中我  们完全可以直接打印,而不通过循环。
NSLog(@“%@”,array);//这里可以直接打印出数组的内容,如果打印的字符串超过一个单词,在输 出时会加双引号。输出如下:

{
one,
two,
three,
"four good"
}//OC自加花括号,来表明这是打印一个数组。

4.以一个数组初始化另外一个数组

NSArray * array2= [[NSArray alloc]initWithArray:array1];
//利用数组2 来初始化数组1,数组1中的元素与2 相同
//数组的每个元素是任意对象ID类型,因为数组实际上是一链表,所以不   要求数组的每个元素类型完全相同。

5.与NSString相同,alloc init 版本对应着一个arrayWithObjects版本
NSArray * array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

6.OC中可以使用一个数组的范围内的元素生成另外一个数组,如下:
NSArray * array1 = [array objectsAtIndexes [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
//集合的元素是从1开始 3个元素,红字部分函数返回一个数字集合的对象,集合元素是1,2,3,

6.查找数组的某个节点
    从数组中去一个元素时要retain,因为数组可能是可变的,其他时候可能执行了delete等操作,使该对象无法引用,使用完时,同样要release。
NSArray * str =[[array objectAtIndex:1]retain];
//取数组位置为1的字符串

7.遍历的牛逼作用

(1)枚举器法(传入类的对象作为数组的元素)
NSEnumerator * enumerator = [array ObjectEnumerator];//数组对象创建一个枚举器
id obj;//创建一个id类型的对象
while (obj=[enumerator nextObject]) {
NSLog(@"%@",obj);}

//循环的第一次,nextObject函数返回数组的元素0,第二次返回1,以此类推。
枚举器法可以实现逆序遍历,这是快速枚举法不可替代的。
NSEnumerator * enumerator = [array reverseObjectEnumerator];
除了创建枚举器,别的地方都与正序无区别。

(2)快速枚举法
相比枚举器法,快速枚举法显得更加简洁
for(id obj in array)
{
NSLog(@"%@",obj);
}//循环的第一次,obj是结点0的地址,第二次是结点1的地址。

8.NSMutableArray 可变数组,数组元素是可变的,类似NSMUtableString。因为其可变性,所以可以对各节进行操作。
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",nil];
//数组的声明同普通数组类似,但是我们可以对数组,进行添加结点,删除 结点等操作。

8.添加结点
[array addObject:@"four"];//添加结点非常简单,没有字符串的各种区分

9.删除结点
[array removeObjectAtIndex:1];//根据指数,删掉的是@”two”
[array removeObject:@”Four”];//根据某个结点的地址,删除对应的结点
[array removeObject:[array objectAtIndex:0] inRange:NSMakeRange(1, 4)];
//在某个范围内(1,4),删除与地址0位置相同地址的结点
[array removeObject:@”one” inRange:NSMakeRange(2, 3)];
//从2开始3个节点内,如果有地址和@”one”相同的结点,删除
//在(2.3)范围内,查找@”one”并删除
后两个函数作用相同,只是写法不同而已。

10.NSString的分割
将字符串分割,然后将分割后的字符串一次存入一个动态数组中。类似C语 言中的strtok。
NSString * str = @"I am a so bad man.";
NSArray * array = [str componentsSeparatedByString:@" "];
//以空格为标准进行字符串分割,操作后,原字符串不变,只是生成了一堆 字符串,装在一个数组中,达到分割的目的。
 Strtok()有一强大的作用,是这个函数不能比拟的,strtok(p," ,")此时可以分 别以空格和","来进行字符串分割,以上函数就不能达到这个作用。我们需要字符合集来解决这问题。
NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" ,"]];
//红字部分是创造一字符串集合,以字符串集合为参数进行分割

11.字符串拼接
将字符串分割,同样可以将分割后的字符串重新拼接
NSString * str2 = [array componentsJoinedByString : @” ”];
//把数组中的字符串拼接在一起,中间空格隔开,形成新的字符串str2

12.字符串交换
[array exchangeObjectAtIndex:0 WithObjectAtIndex:array.count-1];
//交换两个位置的结点,array.count-1 意思是最后一个结点

14.数组排序
[array sortUsingSelector:@selector (oldThanDog:)];
//oldThanDog这个函数为BOOL型函数,实际上是返回YES或者NO来控   制排序。
//这个函数可以排序,但是不知道排序的准则,这里的BOOL型函数实际上 是自写的函数,通过返回值规定排序的原则。

14.seletor 选择器
SEL型变量实际上可以看做一函数指针。
我们可以将函数,抽象成SEL变量来满足我们的需求。
在编写代码的时候,不能确定某一部分引用哪个函数的时候,我们可以引用 SEL型变量[dog performselector:sel] 来调用函数,这里的sel是对某函数抽象化SEL的结果。
对于带参的SEL,我们这样处理。
[str performSelector :sel withObject:str2 ];
//红字部分,就是函数带参SEl类型的处理方式

本文出自 “CoderToDeveloper” 博客,请务必保留此出处http://rongchengfei.blog.51cto.com/6269699/1086045

推荐文章:OC中的集合类-NSSet、NSArray、NSDictionary

NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习的更多相关文章

  1. iOS -Swift 3.0 -Array(数组与可变数组相关属性及用法)

    // // ViewController.swift // Swift-Array // // Created by luorende on 16/9/12. // Copyright © 2016年 ...

  2. NSArray与NSMutableArray 数组与可变数组

    1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWith ...

  3. Objective-C 数组、可变数组

    数组的使用方式 下面是数组:类型NSArray #import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int ...

  4. iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)

    iOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的,      可以存放重复的元 ...

  5. Swift不可变数组

    Objective-C编写了2个不同的类来区分不可变数组(NSArray)和可变数组(NSMutableArray): Swift通过使用常量和变量来区分不可变数组和可变数组. 只要将数组定义为常量, ...

  6. objective-c可变数组

     1 #pragma mark ---------------可变数组-----------------  2 //        可以在数组里面进行增删改的操作  3 //  4 //        ...

  7. OC知识梳理-NSArray与NSMutableArray相关知识

    知识普及: 1.数组中的元素在系统中都会有其默认对应的下标,下标是一个整形的数字,默认从0开始. 例:NSArray *arr3 = @["345","234" ...

  8. Objective - C NSArray不可变数组和NSMutableArray可变数组

    OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见 ...

  9. 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...

随机推荐

  1. 码源中国.gitignore忽略文件配置

    码源中国.gitignore忽略文件配置 ## Ignore Visual Studio temporary files, build results, and ## files generated ...

  2. 123.Best Time to Buy and Sell Stock III---dp

    题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/description/ 题目大意:与122题类似,只是这 ...

  3. [转载]锁无关的(Lock-Free)数据结构

    锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续 Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也 ...

  4. 集合框架之Set学习

    前言:         1.何为框架:可以理解为一个基础结构,在基础结构上进行进一步开发会变得很方便. 2.三种集合类型:集合(Set) :元素无序不可重复: 列表(List) :元素有序可重复: 映 ...

  5. input只读属性 设置和移除 选择数字

    设置只读属性 $('#stage').attr("readonly", "readonly"); 移除 只读属性  $("input").r ...

  6. Linux下软件的安装与管理

    1.源码安装方式 2.RPM包方式安装 3.yum安装方式 4.二进制软件安装方式 1.源码安装方式 (1)下载.解压Apache源码: mkdir /apache #在根目录下创建一个apache目 ...

  7. csu 1749: Soldiers ' Training(贪心)

    1749: Soldiers ' Training Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 37  Solved: 18[Submit][Stat ...

  8. MVC – 4.mvc初体验(2)

    5.显示学员列表 效果 数据表 5.1 首先,在文件夹Models新建一个新建项(W),选择ADO.NET 实体数据模型 (SingleTest.edmx) 5.2 建一个控制器,StudentsCo ...

  9. int类中的方法

    我们知道在python中,一切对象都是类,对象的方法都封装在类中,现在来探讨一下int类中的方法: 我们可以通过help(int)和dir(int)来查看int类中都封装了那些方法:     1.bi ...

  10. 【LOJ】 #2009. 「SCOI2015」小凸玩密室

    题解 神仙dp啊QAQ 我们发现我们需要枚举一个起点,遍历完它所有的儿子然后向上爬 设\(f[i][j]\)表示第i个点的子树全部处理完之后到达i深度为j的祖先的兄弟处 我们只需要对叶子节点和只有一个 ...