zoukankan      html  css  js  c++  java
  • NSMutableArray和NSArray的常用方法及相互转换

    NSMutableArray和NSArray的常用方法及相互转换

    // NSArray --> NSMutableArray  
    NSMutableArray *myMutableArray = [myArray mutableCopy];
    NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:myArray];
    // NSMutableArray --> NSArray NSArray *myArray = [myMutableArray copy];
    NSArray *myArray = [NSArray arrayWithArray: myMutableArray];
    不可变数组对象:

    NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。

    [arr  count]; 得到这个对象数组的长度。

    [arr   objectAtIndex: ...]; 传入数组脚标的id 得到数据对象。

    [arr   arrayWithObjects: ...]; 向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。
     
    NSArray 不可变数组 常用方法
    +(id)arrayWithObjects:obj1,obj2,...nil 创建一个新的数组,obj1,obj2......是他的元素对象,以nil对象结尾
    -(BOOL)containsObject:obj 确定数组中是否包含对象obj
    -(NSUInteger)count 返回数组元素个数
    -(NSUInteger)indexOfObject:obj 第一个包含obj元素的索引号
    -(id)objectAtIndex;i 返回存储在位置 i 的对象
    -(void)makeObjectsPerformSelector:(SEL)selector 将 selector 只是的消息发送给数组中的每个元素
    -(NSArray*)sortedArrayUsingSelector:(SEL)selector 根据selector 指示的比较方法对数组进行排序
    -(BOOL)writeToFile:path atomically:(BOOL)flag 将数组写入指定的文件中,如果 flag 为 YES,则需要先创建一个临时文件

       

    可变数组对象: 

    NSMutableArray 是 NSArray 补充类。NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素。也许你会看到 arrayWithCapacity 方法,这个数组容量仅仅是一个参考,不会真的限制数组的大小。 是为代码优化而设计的。


    [NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
    [array addObject:...] : 向可变数组尾部添加数据对象。
    [array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。
     
    NSMutableArray 常用方法总结
    array 创建一个空数组
    +(id)arrayWithCapacity:size 创建一个数组,指定容量为size
    -(id)initWithCapacity:size 初始化一个新分配的数组,指定容量为size
    -(void)addObject:obj 将对象obj添加到数组末尾
    -(void)insertObject:obj atIndex:i 将对象 obj 插入到索引为 i 的位置
    -(void)replaceObject:obj atIndex:i 将数组中索引为 i 处的元素用obj 置换
    -(void)removeObject:obj 从数组中删除所有是 obj 的对象
    -(void)removeObjectAtIndex:i 从数组中删除索引为 i 的对像
    -(void)sortUsingSelector:(SEL)selector 用 selector 只是的比较方法将数组排序

    在iOS 开发过程中, NSArray,NSMutableArray、NSDictionary、 NSMutableDictionary 经常被用到。这里先来介绍NSArray  与 NSMutableArray。 

    首先,NSArray只能存储Objective-C 对象,而不能存储C语言中的基本数据类型,比如:int,flot,指针等。 在使用NSArray时,需特别注意,必须以nil 结尾。以此来代表结束。 举例如下:

     NSArray 通过类方法 arrayWithObjects 创建一个新的NSArray。

    NSArray * array= [ NSArray arraryWithObjects: @"one", @"two", @"three",nil  ] ;

    为了查看array 的内容, 可通过NSLog方法,如下:

    for(int i=0; i<[array count]; i++ )

    {

    NSLog (@"index %d has %@", i, [array objectAtIndex:i]);

    }

    从中可看出, NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。

    NSMutableArray 是 NSArray 补充类。NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素。

    也行你会看到 arrayWithCapacity 方法,这个数组容量仅仅是一个参考,不会真的限制数组的大小。 是为代码优化而设计的。

    NSMutableArray 使用 addObject: 在末尾添加对象, 用 removeObjectAtIndex: 来删除指定索引处的对象。对象删除后,被删除对象后面的数组元素被迁移,填补空缺。

    这里需特别注意的是:NSArray 的初始化必须以 nil 结束。 如果忘记了,编译器会报错:Missing sentinel in method dispatch.

     另外还需注意,在字符串前加 @ ,这是 数组在 Objective-C  与 C 的区别。

    如何访问获取 NSArray 中的对象呢?  通过 NSArray的 objectAtIndex: 方法。 改写如下:    

    NSArray 的初始化有 两种方法: 

     (1) NSArray *array = [[NSArray alloc]initWithObjects: @"red", @"white",@"blue",nil];  // 不要忘记 最后补填 nil 

     (2) NSArray *array =@[@"red", @"white",@"blue"];    // 这种方法更为简洁些

    NSLog(@"array[0]=%@" , [array objectAtIndex:0]) ;

    输出结果是:array[0]=red

    同理,通过 NSArray的 insertObjectAtIndex:可以很方便地将已有的对象插入数组中的指定位置。

    小结:

    NSArray 其实是很容易理解的。 从本质上讲,NSArray 就是一个存放对象的容器。  NSArray 是静态的对象数组,一旦创建后,就不能再添加和删除对象。 如果你想添加或删除,当然是有办法的,而且还很简单,那就是用 NSMutalbeArray 啊。

     
    iOS开发者交流群:180080550
  • 相关阅读:
    Java-idea-FindBugs、PMD和CheckStyle对比
    Java-idea-PMD源文件级别潜在bug查看
    Java-idea-FindBugs字节码级别潜在bug查看
    Java-idea-Checkstyle自动化代码规范检查
    js-jquery-从SweetAlert到SweetAlert2
    js-jquery-SweetAlert2【二】配置与方法
    js-jquery-SweetAlert2【三】INPUT TYPES
    js-jquery-对象与JSON字符串互相转换
    js-jquery-数组遍历
    java-小技巧-001-Long序列化到前端js不支持
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5382329.html
Copyright © 2011-2022 走看看