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. MGR_ERROR 3092 (HY000): DROP DATABASE failed;

    start group_replication;时报以下错: ERROR 3092 (HY000): DROP DATABASE failed; some tables may have been d ...

  2. Codeforces Round #441 (Div. 2)

    Codeforces Round #441 (Div. 2) A. Trip For Meal 题目描述:给出\(3\)个点,以及任意两个点之间的距离,求从\(1\)个点出发,再走\(n-1\)个点的 ...

  3. LightOJ - 1297 Largest Box LightOJ(一元三次方程求极大值)

    题目链接:https://vjudge.net/contest/28079#problem/K 题目大意:给你一个长为L,宽为W的纸片,四个角剪掉边长为x的正方形,如下图所示,然后折成一个无盖的纸盒, ...

  4. 以太坊go-ethereum客户端查询交易列表(二)

    玩过比特币的朋友都知道,比特币是可以通过api(listtransactions)查询指定地址的历史交易的.但在eth中没有提供类似的查询api.今天这篇博客就简单介绍一下如果解决这个问题. 问题 以 ...

  5. DedeCms当前位置导航去掉最后的分隔符>

    DedeCms的当前位置导航调用标签{dede:field name=’position’ /},在栏目页里调用的当前位置导航,最后会出现分割符号“>”,如:主页 > DedeCms 模板 ...

  6. MVC – 15.路由机制

    15.1.路由检测插件 - RouteDebug 15.2.路由约束 15.3.命名路由 15.4.验证码 15.5.ASP.NET MVC 与 三层架构 15.6.Area区域 15.6.1.尝试将 ...

  7. python collection系列

    collection系列 不常用功能,需要进行模块功能导入: import collection Counter 常用方法测试: #!/usr/local/env python3 ''' Author ...

  8. ASP.NET Zero--4.不使用谷歌字体,提升加载速度

    jtable控件样式中会使用到谷歌字体,每次访问都特别慢 1.打开jtable.css文件 [..\MyCompanyName.AbpZeroTemplate.Web\libs\jquery-jtab ...

  9. JS 判断浏览器类型,获取位置信息,让手机震动

    判断是否是安卓 var isAndroid = /Android/i.test(navigator.userAgent); 判断是否是IOS系统 var isIOS = /iPhone|iPad|iP ...

  10. loadrunner获取毫秒及字符串替换实现

    loadrunner获取毫秒及字符串替换实现 今天做一个性能测试,参数化要求创建用户名不可以重复,想来想不没有什么好的办法来避免用户名字的重复.所以就想用时间+随机数来实现,但是实现中遇到一个问题. ...