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

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]initWi ...

  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. ASP.NET MVC的过滤器

    APS.NET MVC中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用到了过滤器. MVC支持的过滤器 ...

  2. HoverTree项目已经实现分层

    HoverTree项目已经初步实现分层,源代码已经上传到 http://hovertree.com/down/ 请到SOURCE CODE查看. 在本地用SQL Server 2008 数据库测试成功 ...

  3. 为什么要用 Bootstrap

    [Bootstrap](http://hovertree.com/menu/bootstrap/) 是由两个 twitter 员工开发并开源的前端框架,非常火爆,而如此火爆自然有它的道理,在我们团队的 ...

  4. 搭建java环境

    操作系统:Win10 java版本:1.8.0_102 1.下载安装java JDK(安装时把jre放在了同级目录) 地址为:F:\Program Files\Java 目录下 2.配置环境变量 此电 ...

  5. Java面试题系列 提高Java I/O 性能

    1.提高java的 i/o性能.. http://blog.csdn.net/cherami/article/details/3854 我们知道Java中一般的输入输出流都是用单字节的读取方法来进行I ...

  6. Scalaz(50)- scalaz-stream: 安全的无穷运算-running infinite stream freely

    scalaz-stream支持无穷数据流(infinite stream),这本身是它强大的功能之一,试想有多少系统需要通过无穷运算才能得以实现.这是因为外界的输入是不可预料的,对于系统本身就是无穷的 ...

  7. MAC 卸载 openfire

    顺序执行以下命令: sudo rm -rf /Library/PreferencePanes/Openfire.prefPane sudo rm -rf /usr/local/openfire

  8. PHP Redis 全部操作方法

    Classes and methods Usage Class Redis Class RedisException Predefined constants Class Redis Descript ...

  9. Java的对象初始化过程

    成员变量(字段)初始化顺序 在一个类里初始化的顺序是由成员变量在类里面的定义的顺序来决定的.即使成员变量大量散布于类的各个方法定义的中间,那些成员变量仍会在调用任何方法之前得以初始化,甚至在构造函数调 ...

  10. JavaScript for循环 闭包 【转】

    个网友问了个问题,如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html > <head> <meta http-e ...