iOS--NSArray,NSMutableArray常用用法

原创 2015年07月10日 23:20:44


1.NSArray 不可变数组

使用NSArray关键字创建一个不可变的数组,一旦初始化完毕后这个数组的元素是不可以在动态的添加与删除。

NSArray的类方法arrayWithObjects:使用一列对象作为元素创建数组,这种情况下需要按顺序列出对象并使用逗号隔开.将这个数组的最后一个值指定为nil,标记参数数组的结束.它实际上并不会存储在数组中.

[array count] : 得到这个数组对象的长度。
[array objectAtIndex index]: 传入数组的索引(index) 得到数据对象。
[arrayWithObjects: …] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil,以标志结束.

上面我们使用了两种方法遍历数组中的元素,第一种方式比较普遍,但是效率不好 ,推荐使用第二种方式.

+(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,则需要先创建一个临时文件

2.NSMutalbeArray 可变数组

大多时候我们需要动态的增加和删除数组中的元素,这就需要使用MSMutableArray.

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 只是的比较方法将数组排序

主函数文件

#import <Foundation/Foundation.h>
#import "Person.h"
/*
NSArray :不可变数组
NSMutableArray : 可变数组
 */
int main()
{
    // @[] 只创建不可变数组NSArray
    /* 错误写法
    NSMutableArray *array = @[@"jack", @"rose"];
    [array addObject:@"jim"];
    */
    //NSArray *array = @[@"jack", @"rose"]; 
    return 0;
}
// 可变数组的基本使用
void use3()
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
    // 添加元素
    [array addObject:[[Person alloc] init]];
    [array addObject:@"jack"];
    // 删除元素
    //[array removeAllObjects];
    // 删除指定的对象
    // [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];
    // 错误写法
    // [array addObject:nil];
    NSLog(@"%@", array);
    NSLog(@"%ld", array.count);
}
// 遍历数组
void use2()
{
    Person *p = [[Person alloc] init];
    NSArray *array = @[p, @"rose", @"jack"];
    //    for (int i = 0; i<array.count; i++)
    //    {
    //        NSLog(@"%@", array[i]);
    //    }
    // id obj代表着数组中的每一个元素
    //int i = 0;
    //    for (id obj in array)
    //    {
    //        // 找出obj元素在数组中的位置
    //        NSUInteger i = [array indexOfObject:obj];
    //
    //        NSLog(@"%ld - %@", i, obj);
    //        //i++;
    //        if (i==1)
    //        {
    //            break;
    //        }
    //    }
    [array enumerateObjectsUsingBlock:
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         } 
     }];
    //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
    //    {
    //        NSLog(@"%ld - %@", idx, obj);
    //        if (idx == 0)
    //        {
    //            // 停止遍历
    //            *stop = YES;
    //        }
    //    };
    //    for (int i = 0; i<array.count; i++)
    //    {
    //        // 用来标记是否需要停止遍历
    //        BOOL isStop = NO;
    //        // 取出元素
    //        id obj = array[i]; 
    //        myblock(obj, i, &isStop);     
    //        if (isStop)
    //        {
    //            break;
    //        }
    //    }
}
void use()
{
    /*
     int a = 5;
     int ages[10] = {1, 90, 89, 17};
     Person *p = [[Person alloc] init];
     Person *persons[5] = {p,  [[Person alloc] init]};
     */
    // OC数组不能存放nil值
    // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
    // 这个array永远是空数组
    // NSArray *array = [NSArray array];
    /*
     1.NSArray的创建
     */
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];
    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    // 快速创建一个NSArray对象
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];
    /*
     2.NSArray的元素个数
     */
    NSLog(@"%ld", array3.count);
    /*
     3.NSArray中元素的访问
     */
    NSLog(@"%@", [array3 objectAtIndex:1]);
    //array3[1];
    NSLog(@"%@", array3[0]);
}
Person类

//person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
//person.m
#import "Person.h"
@implementation Person
@end



NSMutableArray (可变数组增、删、改、查)

//1.1 初始化 NSMutableArray *muArray = [NSMutableArray arrayWithObjects:@"123",@"345",@"2354", nil]...
  • Jason_chen13
  • Jason_chen13
  • 2015年12月08日 17:58
  • 2048

NSMutableArray中各种自定义排序方法

NSMutableArray中各种自定义排序方法 /*  (1)sortedArrayUsingComparator调用NScomparator方法  */ FirstMeth...
  • Judy_luo
  • Judy_luo
  • 2015年07月20日 08:16
  • 1460

NSMutableArray遍历删除元素

在学习Objective-C的过程中,我们会学到NSMutableArray这个类,也就是可变数组。在做和可变数组相关的编程题的时候,我们会遇到一个这样的问题:在对数组遍历时删除数组元素。 有些人一...
  • renlangwww
  • renlangwww
  • 2017年02月03日 20:29
  • 897

关于NSMutableArray线程安全的思考和实现

NSMutableArray是线程不安全的,当有多个线程同时对数组进行操作的时候可能导致崩溃或数据错误,下面是我对线程安全的几个思路,希望由此能给你带来一些思路,如果有错误的地方还希望大家能够指出 ...
  • kongdeqin
  • kongdeqin
  • 2016年11月17日 16:32
  • 2997

OC NSArray 和 NSMutableArray 常用方法的使用和实例

#import NSInteger intSort(id num1, id num2, void *context); int main(int argc, const char...
  • qq_30402119
  • qq_30402119
  • 2015年08月08日 14:41
  • 633

IOS学习 NSMutableArray内部元素的排序

1函数介绍与实例    函数一: - (void)sortUsingSelector:(SEL)comparator; 适用于数组中的元素自带比较函数时; 数组排序函数,调用该函数...
  • qw25767889
  • qw25767889
  • 2015年05月22日 16:27
  • 681

NSArray NSMutableArray 的并发遍历 与 反向遍历

NSArray NSMutableArray http://blog.csdn.net/ysy441088327/article/details/7460200 注: iOS 6 ...
  • jeffasd
  • jeffasd
  • 2015年10月14日 17:33
  • 610

[并发并行]_[Object-C]_[使用NSMutableArray等非线程安全集合类的注意事项]

场景: 1. 开发Mac,iOS程序时,一般都会涉及到多线程开发, 比如工作线程在更新数据模型, 主线程根据数据模型来显示界面. 比如最常用的NSMutableArray, NSMutableDic...
  • infoworld
  • infoworld
  • 2015年11月12日 15:40
  • 3733

NSArray和NSMutableArray的介绍和用法

一、NSArray 1、C语言中的数组1)回顾C语言中的数组使用方法 int a[5]={1,2}; int *pa[3];2、NSArray的基本介绍1)什么是NSArray? NSArray是O...
  • u013136306
  • u013136306
  • 2015年11月10日 11:05
  • 240

NSMutableArray 的简单用法

// // main.m // NSMutableArray // // Created by 李典 on 16/8/29. // Copyright © 2016年 李典. All righ...
  • lidian6864677
  • lidian6864677
  • 2016年08月30日 00:41
  • 112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS--NSArray,NSMutableArray常用用法
举报原因:
原因补充:

(最多只允许输入30个字)