1、OC数组和c数组的区别
        C语言的数组:
            相同类型变量的有序结合。 类型:可以是简答数据类型、构造数据类型    
            int     a[10];
            int   *p[10];

1)NSArray是一个对象,是任意类型对象地址的集合
        不能存放简单的数据类型(int, float, NSInteger…)
        除非通过一些手段把简单数据类型变成对象。
      2)C数组可以保存任意类型的数据
      3)NSArray下标越界不会有警告,但是运行会直接报错

2、如何创建一个数组
    2.1、
        //通过类的方法创建
            arrayWithObjects :消息
            作用:通过指定对象创建一个数组
            [NSArray arrayWithObjects:id, id, nil];

arrayWithArray: 消息
            作用:通过已存在的数组创建一个数组
            [NSArray arrayWithArray:array];

//通过对象的方法创建
            initWithObjects: 消息
            作用:通过指定对象创建一个数组
            [[NSArray alloc] initWithObjects:(id), …(id), nil]
        
            initWithArray: 消息
            作用:通过已存在的数组创建一个数组
            [[NSArray alloc] initWithArray:<#(NSArray *)#>]

2.2、Objective-c 2.0 新特征

NSArray *array4 = @[@"one one", @"two two"];

2.3 、arrayWithObjects:count
        将一个c类型的对象数组转换为oc的数组对象

[NSNull null] 空对象
        
    2.4、创建一个空对象
        NSNull *nilObject = [NSNull null];
        NSArray *arr4 = [NSArray arrayWithObjects:@"a a", nilObject, nil];
        NSLog(@"arr4 = %@", arr4);

3.数组的元素是什么
      1)数组元素可以是任意对象,装的是对象的地址    
            NSInteger   CGFloat  BOOL  xxx

4.什么是id类型的变量
      1)通用对象类型        void *     NSObject *
      2)可以指向任何对象

NSArray常用方法
    1、获取数组元素个数
      count消息
        - (NSUInteger)count;
    2、通过索引获取相应的元素
        - (id)ObjectAtIndex:(NSUInteger)index;
        作用:通过下标获取数组中指定位置的元素
        - (id)lastObject;
           作用:取出最后一个元素
    3、通过对象地址获取在数组中的索引
        - (NSUInteger)indexOfObject:(id)anObject;
    4、判断数组中数组包含元素anObject
        - (BOOL)containsObject:(id)anObject;

5、如何取出数组中的一部分元素
      1)subarrayWithRange消息
        作用:取出数组中指定范围内的元素
      2)objectsAtIndexes消息
        作用:从数组中获取指定下标的元素
        NSIndexSet对象,一个下标集合
        NSMutableIndexSet对象,是NSIndexSet的子类,可以添加不同的下标

NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
        [indexes addIndex:0];
        [indexes addIndex:2];
        [indexes addIndex:3];
        //将清单交给数组对象
        NSArray *subarr2 = [arr2 objectsAtIndexes:indexes];

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{ @autoreleasepool {
NSArray *array = [[NSArray alloc] initWithObjects:@"zhangsan", @"lisi", @"wangwu", nil]; //1. 求数组的元素的个数
NSUInteger count = [array count];
NSLog(@"count = %lu", count); //3 //2. 根据索引获得数组的元素 //2.1 使用下标的方式获得元素
NSLog(@"array[0] = %@", array[0]);
//2.2 通过方法获得元素
id obj = [array objectAtIndex:1];
NSLog(@"obj = %@", obj); //2.3 获得第一个元素
NSString *firstObj = [array firstObject];
NSLog(@"firstObj = %@", firstObj); //2.4 获得最后一个元素
NSString *lastObj = [array lastObject];
NSLog(@"lastObj = %@", lastObj); //3. 通过对象获得对象的下标
NSUInteger index = [array indexOfObject:@"lisi"];
NSLog(@"index = %lu", index); //4. 判断数组中数组包含元素anObject
BOOL ret = [array containsObject:@"yangliu"];
NSLog(@"ret = %d", ret); }
return 0;
}

NSArray数组的遍历
    回忆:如何在c语言中遍历一个数组的所有元素
    NSlog(@"%@", arr);  //打印数组就是打印数组的每个元素

1、通过下标遍历数组
        int i;
        for (i = 0; i < length; i ++)

2、NSEnumerator  枚举器
      1)objectEnumerator消息
        作用:正序输出所有元素
      2)reverseObjectEnumerator消息
        作用:逆序输出所有元素

【枚举器法】
    NSEnumerator *enumerator = [array objectEnumerator];
    id obj = nil;
    while (obj = [enumerator nextObject])
    {
        NSlog(@"obj = %@", obj);
    }
【注】
         1)id obj: 因为不知道数组里面的具体的对象,所有使用泛型指针。
                 如果知道都是 某一个相同的类型, 可以使用具体的指针
                 这里可以使用 NSString *
         
         2) objectEnumerator:          正序遍历数组
              reverseObjectEnumerator:   逆序遍历数组
         
         3)每次得到一个数组的一个元素, 将其赋值给 obj, 直到obj 得到的指针为 nil,
             才会退出循环.

NSMutableArray

1、增加数组元素
        追加元素
        addObject 消息
    (void)addObject:(id)anObject;

指定索引插入元素 [0 ~ count]
      1)如何插入一个元素
        insertObject:atIndex消息
        - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

2)    插入多个元素
        insertObjects:atIndexes
   
    2、如何删除元素
      1)删除指定索引的元素
        - (void)removeObjectAtIndex:(NSUInteger)index;
         2) 删除最后一个元素
        - (void)removeLastObject;
         3)根据指定对象来删除元素
        - (void)removeObject:(id)anObject;
         4)删除所有元素
        - (void)removeAllObject;
    
        5)一次性删除所有指定下标的元素
        removeObjectsAtIndexes 消息
        NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
        [arr1 removeObjectsAtIndexes:indexes];

6) 删除指定范围内指定的对象
        - (void)removeObject:(id)anObject inRange:(NSRange)range;

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{ @autoreleasepool { NSMutableArray *mutArray = [NSMutableArray array]; //增, 删、 改
//____________________增_________________________
//__________添加__________
//1) 添加一个元素
[mutArray addObject:@"a1"];
[mutArray addObject:@"a2"]; //2) 将一个数组的内容,全部添加到新的数组里面
[mutArray addObjectsFromArray:@[@"a3", @"a4"]];
NSLog(@"1--mutArray = %@", mutArray); //_________插入_________
//1)在指定的下标位置 插入 一个对象
[mutArray insertObject:@"XXX" atIndex:1];
NSLog(@"2--mutArray = %@", mutArray); //2)通过下标集合 插入一个数组的 所有的元素
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; //添加 整数
[indexes addIndex:0];
[indexes addIndex:2];
[indexes addIndex:6]; //下标的个数 和 插入数组的元素的个数 必须 一样多, 都则程序崩溃
NSArray *insetArr = @[@"zhangsan", @"lisi", @"wangwu"];
[mutArray insertObjects:insetArr atIndexes:indexes];
NSLog(@"3--mutArray = %@", mutArray); //_________________________删________________________ //1) 通过下标删除元素
[mutArray removeObjectAtIndex:0];
NSLog(@"4--mutArray = %@", mutArray); //2) 删除最后一个元素
[mutArray removeLastObject];
NSLog(@"5--mutArray = %@", mutArray); [mutArray removeObjectsInRange:NSMakeRange(0, 2)];
NSLog(@"6--mutArray = %@", mutArray); //根据数组删, 只会删参考数组里面和被删除数组里面都有的元素
[mutArray removeObjectsInArray:@[@"a2", @"a3", @"xiaozhang"]];
NSLog(@"7--mutArray = %@", mutArray); //删除数组中的对象, 【注】删除所有的相同的对象
[mutArray addObject:@"XXX"];
[mutArray addObject:@"XXX"];
[mutArray removeObject:@"XXX"];
NSLog(@"8--mutArray = %@", mutArray); //删除数组里面所有的对象
[mutArray removeAllObjects];
NSLog(@"9--mutArray = %@", mutArray); }
return 0;
}

OC第三节——NSArray和NSMutableArray的更多相关文章

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

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

  2. 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray

    昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...

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

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

  4. NSArray 与 NSMutableArray 的排序

    由于集合的使用过程中,经常需要对数组进行排序操作,此博客用于总结对在OC中对数组排序的几种方法 1.当数组中存放的是Foundation框架中提供的对象时,直接使用 compare:方法 如:NSSt ...

  5. IOS数组NSArray与NSMutableArray知识点

    此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:Foundati ...

  6. NSArray和NSMutableArray

    //1. NSArray EOItems *eOItems = [[EOItems alloc] init]; eOItems.ID = [NSNumber numberWithInt:]; NSAr ...

  7. NSArray、NSMutableArray基本用法

    NSArray.NSMutableArray基本用法 一.基本操作 初始化方法:1.init返回一个空数组 2.initWithArray从已有数组初始化 3.initWithContentsOfFi ...

  8. NSArray和NSMutableArray相互转换, 以及常用方法-备

    有时候项目中NSArray和NSMutableArray需要相互转化,下面给出相关代码1.NSArray 1.1 转化:NSMutableArray 1 NSMutableArray *mutable ...

  9. NSArray、NSMutableArray和NSMutableDictionary的用法

    转自:http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt=1 NSArray是静态的数组,就是它所指向的内容是不可改变的,它指向一段内存区域 ...

随机推荐

  1. xpath中/和//的差别

    xpath中 "/"是在子节点中查找,"//"是在所有子节点中查找,包括子节点的子节点. example: leve1/leve2:得到文本leve2 leve ...

  2. Beta版本冲刺第六天 12.12

    一.站立式会议照片: 二.项目燃尽图: Android端 后台 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 邮箱验证和用户评价的填写 用户评价的查看以 ...

  3. java Base64算法的使用

    Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息.详见 Base64介绍 1 自定义的base64算法 Base64Encrypt.java public c ...

  4. SPOJ 3273

    传送门: 这是一道treap的模板题,不要问我为什么一直在写模板题 依旧只放代码 Treap 版 //SPOJ 3273 //by Cydiater //2016.8.31 #include < ...

  5. w3m常用快捷键

    H    显示帮助 q    退出,会有提示的 j,k,l,h  移动光标 J/K   向下/向上滚屏 T     打开一个新标签页 Esc-t 打开所有标签页,供你选择,使用jk来上下移动 U    ...

  6. WinForm------DockManager控件的使用方法(里面包含DockPanel控件)

    1.在"引用"中添加DevExpress.XtraBars和DexExpress.XtraNavBar程序集 2.往工具栏拖出DockManager控件,点击右上角的小三角,再点击 ...

  7. 三大WEB服务器对比分析(apache ,lighttpd,nginx)

    一.软件介绍(apache  lighttpd  nginx) 1. lighttpd Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点.lighttpd是众多 ...

  8. easyUI中tree的简单使用

    一.在JS中的代码 $('#tt').tree({ url: baseCtx + 'lib/easyui-1.4/demo/tree/tree_data1.json',//tree数据的来源,json ...

  9. mysql5.7.11编译安装以及修改root密码小结

    系统是cenos6.7 64位的,默认mysql5.7.11下载到/usr/local/src,安装目录在/app/local/mysql目录下,mysql数据放置目录/app/local/data. ...

  10. Div内有ul li元素,Div设置高度100%,谷歌IE下li过多会显示滚动条,而火狐下就会滚动条就不起作用,li会撑大Div

    产品上也许是用了过多iframe问题,自己做了demo没有这种情况 解决办法: 设置Div的display样式为-moz-inline-grid -moz-代表火狐私有属性,使用自己的div样式就可以 ...