Objective - C NSArray不可变数组和NSMutableArray可变数组

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法。

OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型。

不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素。

创建一个不可变数组对象

//1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号)

NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger",@"honghuang",@"taixu",@"zhili", nil]; //nil不是对象,只是一个标志,告诉编译器数组赋值结束

//2.便利构造器

NSArray *array2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"zhonger",@"duliu", nil];

打印出的数据以()内容显示,比如:

array1 is (
    zhonger,
    honghuang,
    taixu,
    zhili
)

//3.笑笑语法 语法糖,字面量  这是不可变数组的写法。。。

//OC中的数组可以存放不同类型的对象

NSArray *array3 = @[@"yousiyi", @"huangshenme", @"shuishen", @"qiuxiang", @12];

//数组的两个核心方法  count  objectAtIndex:

//count 求数组元素个数

unsigned long count = [array1 count];

NSLog(@"array1count is %lu",count);    //可以打印出元素的个数

//objectAtIndex:通过给定的下标,找到相应的元素

NSString *bada = [array2 objectAtIndex:1];

NSLog(@"bada is %@",bada);

NSString *zhonger = array2[2];  //语法糖表达方式

NSLog(@"zhonger is %@",zhonger);

//遍历array3里面的每一个元素

unsigned long count1 = [array3 count];

for (int i = 0; i < count1; i ++) {

NSLog(@"%@",array3[i]);//语法糖

}

//判断数组中是否包含某个元素

BOOL isTrue = [array2 containsObject:@"zhuba"];

NSLog(@"isTrue is %d",isTrue);

//获取某个元素所在的数组下标

NSUInteger index = [array2 indexOfObjectIdenticalTo:@"bada"];

NSLog(@"index is %lu",index);

//通过数组来实现分割字符串,拼接字符串、

//以空格分隔字符串

NSString *str = @"zhonger m 19 m";

NSArray *resultArray = [str componentsSeparatedByString:@" "];

//以66666拼接字符串

NSArray *rArray = @[@"bada", @"qiuxiang",@"zaiyiqi"];

NSString *str1 = [rArray componentsJoinedByString:@"66666"];

//至于可变数组,在不可变数组的情况下,提供了增删改的操作,让数组功能变得更加多样化

//1.创建一个可变数组

NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:0];

//2.便利构造器

NSMutableArray *mArr1 = [NSMutableArray arrayWithCapacity:0];

//3.可变数组的字面量创建方式

NSMutableArray *mArr2 = [@[@"zhonger", @"dada", @"zhuzhu", @"linlin"]mutableCopy];

//往可变数组里添加元素,addobject

[mArr2 addObject:@"addobject"];

//往可变数组的指定位置插入一个新的元素  insertObject

[mArr2 insertObject:@"charu" atIndex:1];

//移除可变数组中的某一元素

//通过下标

[mArr2 removeObjectAtIndex:4];

NSLog(@"mArr2 is %@",mArr2);

//通过指定内容

[mArr2 removeObject:@"zhuzhu"];

NSLog(@"mArr2 is %@",mArr2);

//删除数组中最后一个元素

[mArr2 removeLastObject];

NSLog(@"mArr2 is %@",mArr2);

//删除数组中所有的元素

//[mArr2 removeAllObjects];

//NSLog(@"mArr2 is %@",mArr2);

//替换可变数组中的元素

[mArr2 replaceObjectAtIndex:0 withObject:@"gou"];

[mArr2 replaceObjectAtIndex:1 withObject:@"taixu"];

NSLog(@"mArr2 is %@", mArr2);

//交换可变数组中两个元素的位置

[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];

NSLog(@"mArr2 is %@", mArr2);

注意:无论是不可变还是可变数组,如果是在MRC环境下,只要加入这个数组中,都是导致引用计数加1,作为三大容量之一,数组存放的是有序的对象,不同于字典的有序,数组可以实现排序。

时间: 2024-12-24 14:05:13

Objective - C NSArray不可变数组和NSMutableArray可变数组的相关文章

Objective-C( Foundation框架 一 数组(NSMutableArray))

NSMutableArray:可变数组 NSMutableArray是NSArray的子类 创建NSMutableArray数组对象 添加数组元素: // 创建数组 NSMutableArray *array = [NSMutableArray arrayWithObject:@"lier",@"hello",nil]; [array addObject:[[Person alloc] init]]; // 添加元素 [array addObject:@"

NSMutableArray 可变数组的使用

NSMutableArray 是 NSArray 的一个子类,因此可以在任何使用 NSArray 的位置使用 NSMutableArray. 除了包含在 NSArray 中的方法,NSMutableArray 还提供了修改数组的方法. //向数组添加对象 addObject: 和 insertObject:atIndex: //从数组删除对象 removeAllObjects.removeLastObject 和 removeObjectAtIndex: //替换数组中的某个对象 replace

oc-可变数组继承不可变数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承不可变数组 //1.创建  设定元素个数进行创建 NSMutableArray *mutArr=[NSMutableArray arrayWithCapacity:7]; //2.向数组中添加一个元素 NSArray *arr=@[@"MON",@"TUE&qu

可变数组继承不可变数组,添、删、改、查、替换

#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承不可变数组 //1.创建.设定元素个数进行创

可变数组继承不可变数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承不可变数组 //1.创建  设定元素个数进行创建 NSMutableArray *mutArr=[NSMutableArray arrayWithCapacity:7]; //2.向数组中添加一个元素 NSArray *[email protected][@"MON",@

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅

OC基础 可变字典与不可变字典的使用

OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"huang",@"name",@"30",@"age", nil]; NSLog(@"%@",

Swift的数组与OC中数组的区别

相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSArray和NSMutableArray,他们可以存储任何类型的实例,而且不提供他们返回对象的任何本质信息. Swift的数组与OC中数组的区别,布布扣,bubuko.com

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在你的应用程序中数组越界了,那么对不起,如果由着程序的性子的话是会崩溃的.为了防止崩溃呢,我们会对集合做一些安全的处理.比如对数组进行扩展,从而对数组的索引进行安全检查,保证数组的index在正常范围内.在Objective-C中也是经常对数组,字典等做一些处理操作. 今天的博客的主要内容是先对Objective-C中常用集合的安全