Foundation框架-数组


NSArray :数组
1>OC数组只能存放OC对象,不能存放非OC对象,如:int,struct,enum等
2>可以存放不同类型的对象
3>OC数组不能存放nil,因为nil在数组是数组元素结束的标志
C语言数组:只能存放同一数据类型的元素,如:int a[10]={1,2,3};
OC数组可以存放不同类型的数据,如下
    // 创建一个Person对象
    Person *p = [[Person alloc] init];
    // array数组有Person类的p对象和"jack"字符串元素
    NSArray *array = [NSArray arrayWithObjects:p,@"jack", nil];
数组的用法
调用数组的类方法[NSArray arrayWithObject: id],这个类方法只能添加一个元素,id为任何数据类型的对象,调用[NSArray arrayWithObjects:id.....,nil]时,这个类方法可以为数组添加N个元素,但是结尾要有一个nil标志,为数组元素结束的标志,如
    //只能为数组添加一个元素
    NSArray *array1= [NSArray arrayWithObject:@"I am jack"];
    // array数组有Person类p对象,"jack"字符串元素等,以nil结束
    NSArray *array2 = [NSArray arrayWithObjects:p,@"jack",@"1234",@"I love OC", nil];
获取数组的元素个数,利用数组对象的count方法[array count]或array.count,返回值时NSInteger类型,输出占位符要用@"ld"
    NSArray *array2 = [NSArray arrayWithObjects:p,@"jack",@"1234",@"I love OC", nil];
    NSLog(@"%ld",array2.count); //返回值时I+NSInteger类型,输出占位符要用@"ld"
快速创建一个数组
    // 创建一个Person对象
    Person *p = [[Person alloc] init];
    NSArray *array4 = @[p,@"jack",@"I love OC",@"1234"];
访问OC数组元素
访问数组的某个元素的值,可以调用对象方法objectAtIndex:NSInteger,也可以利用C语言访问数组的形式,即:数组名+下标 的形式(不是C语言,而是编译器的特性,编译器遇到这种格式时,自动转换成对象方法objectAtIndex:NSInteger)
    // array数组有Person类p对象,"jack"字符串元素等,以nil结束
    NSArray *array2 = [NSArray arrayWithObjects:p,@"jack",@"1234",@"I love OC", nil];
    NSLog(@"%@",[array2 objectAtIndex:2]); //调用对象方法objectAtIndex
    // array数组有Person类p对象,"jack"字符串元素等,以nil结束
    NSArray *array3 = [NSArray arrayWithObjects:p,@"jack",@"1234",@"I love OC", nil];
    NSLog(@"%@",array3[2]); //以C语言形式:数组名+下标
遍历字符串
1>利用for循环,以数组长度作为界限,依次访问
<pre name="code" class="objc">    Person *p = [[Person alloc] init];
    NSArray *array4 = @[p,@"jack",@"I love OC",@"1234"];
    for (int i=0; i<array4.count; i++)
    {
        NSLog(@"%@",array4[i]);
    }
 不能够显示对应元素的序号,输出结果 
 <Person: 0x1002057e0>
 jack
 I love OC
 1234
2>取出 array数组中的每一个元素给 obj,然后执行一次循环体
    Person *p = [[Person alloc] init];
    NSArray *array4 = @[p,@"jack",@"I love OC",@"1234"];
    for (id obj in array4)
    {
        NSUInteger i = [array4 indexOfObject:obj]; // 返回obj元素对应的元素号
        NSLog(@"%ld - %@",i,obj);
    }
输出结果
 0 - <Person: 0x10010c4c0>
 1 - jack
 2 - I love OC
 3 - 1234
3>每遍历到一个元素,就会调用一次 block,并且当前元素和索引位置定做参数传给 block
调用对象的enumerateObjectsUsingBlock方法
    Person *p = [[Person alloc] init];
    NSArray *array4 = @[p,@"jack",@"I love OC",@"1234"];
    [array4 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%ld - %@",idx,obj);
    }];
输出结果
 0 - <Person: 0x10010c4c0>
 1 - jack
 2 - I love OC
 3 - 1234
此方法比较好,效率高,不用声明新的变量

以上是对数组的学习和认识,做出的总结






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值