您的位置:首页 > 移动开发 > Objective-C

Objective-C 【NSMutableArray】

2015-09-14 11:09 148 查看
NSMutableArray 介绍

NSMutableArray 是 NSArray 的子类

NSArray 是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素

NSMutableArray 是可变的,随时可以往里面添加、更改、删除元素

代码:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        1、NSMutableArray 创建方法
        
//        ①可以创建空数组
        NSMutableArray *array1=[NSMutableArray array];
        
        //定义一个长度为10的数组
        NSMutableArray *array2=[[NSMutableArray alloc]initWithCapacity:10];
        [array2 addObject:@"ad"];
        
//        ②调用类方法创建数组
//        NSMutableArray *array3=[NSMutableArray arrayWithObjects:@"qw",@"ed",@"1qa",@"2w4r",@"zxc", nil];
        
//        ③调用对象方法创建数组
//        NSMutableArray *array4=[[NSMutableArray alloc]initWithObjects:@"adf",@"daf",@"fadsfa", nil];
        
//        2、数组的使用
        
//        ①可以向数组添加元素(以array1为例)
        [array1 addObject:@"one"];
        [array1 addObject:@"two"];
        [array1 addObject:@"two"];
        [array1 addObject:@"one"];
        [array1 addObject:@"two"];
        [array1 addObject:@"one11"];
        
        [array1 addObjectsFromArray:array2];//将array2中的所有元素都添加到array1中(把另外一个数组整体添加该数组中)
//        for (NSString *str1 in array1) {
//            NSLog(@"str1 = %@",str1);
//        }
        NSLog(@"array1 = %@",array1);
        
//        ②计算数组的长度
        NSUInteger len1=array1.count;
        NSLog(@"len1 = %ld",len1);
        
//        ③插入一个元素在指定位置
        [array1 insertObject:@"one1" atIndex:1];
        NSLog(@"array1 = %@",array1);
        
//        ④删除末尾的元素
        [array1 removeLastObject];
        NSLog(@"array1 = %@",array1);
        
//        ⑤删除所有元素
//        [array1 removeAllObjects];
//        NSLog(@"array1 = %@",array1);
        
//        ⑥删除指定元素
        [array1 removeObject:@"one"];//有几个删几个(根据对象isEqual消息判断)
        NSLog(@"array1 = %@",array1);
        
        [array1 removeObjectIdenticalTo:@"two"];//根据对象的地址判断
        NSLog(@"array1 = %@",array1);
//        我们发现上面两个方法 removeObject & removeObjectIdenticalTo 都能达到删除指定元素的目的,而且是有几个删几个,但是他们还是有小小的不同。分析一下:用removeObject删除某一个对象实质上只是将对象的引用计数-1,对于对象本身没有什么影响,但是如果我们要完全删除对象的本体,可以使用removeObjectIdenticalTo方法
        
//        ⑦替换指定元素
        [array1 replaceObjectAtIndex:1 withObject:@"a"];
        NSLog(@"array1 = %@",array1);
        
//        ★替换指定元素更方便的写法,直接将数组中的某一个元素赋予新值,因为是可变数组,所以这么做是可以的
        array1[0]=@"q";
        NSLog(@"array1 = %@",array1);
        
//        ⑧交换数组中两个元素的位置
        [array1 exchangeObjectAtIndex:0 withObjectAtIndex:1];//上面的两个参数是需要交换的两个元素的下标
        NSLog(@"array1 = %@",array1);
        
//        3、NSMutableArray 的错误用法
        
//        NSMutableArray *array5=@[@"ad",@"fad",@"12"];
        //首先NSMutableArray创建出来的是一个可变数组,而不能用NSArray创建数组的简写形式创建,因为用这种简写形式创建出来的数组是不可变的,即使你是用NSMutableArray这个类创建的也是一个不可变数组(相当于NSMutableArray调用父类NSArray的方法)
//        [array5 addObject:@"dsafa"];//上面那句话没有错误,但是如果加上这句话就有错误了,不可变数组怎么能再往里添加元素呢?
    }
    return 0;
}


运行结果:

2015-09-14 17:14:46.138 NSMutableArray[23100:2683033] array1 = (
    one,
    two,
    two,
    one,
    two,
    one11,
    ad
)
2015-09-14 17:14:46.139 NSMutableArray[23100:2683033] len1 = 7
2015-09-14 17:14:46.139 NSMutableArray[23100:2683033] array1 = (
    one,
    one1,
    two,
    two,
    one,
    two,
    one11,
    ad
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    one,
    one1,
    two,
    two,
    one,
    two,
    one11
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    one1,
    two,
    two,
    two,
    one11
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    one1,
    one11
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    one1,
    a
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    q,
    a
)
2015-09-14 17:14:46.140 NSMutableArray[23100:2683033] array1 = (
    a,
    q
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: