OC系列foundation Kit基础-NSArray

一.NSArray数组创建

1.通过构造方法创建数组

a.initWithObjects创建数组

Person *p = [[Person alloc]init];
NSArray *arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];
NSLog(@"arr is %@",arr);

  输出:

2016-06-27 15:19:16.573 OcTest[830:552500] arr is (
    one,
    two,
    three
)
Program ended with exit code: 0

b.initWithArray创建数组

NSArray *arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",nil];
NSArray *arr1 = [[NSArray alloc]initWithArray:arr];
NSLog(@"arr is %@",arr1);

  输出同上

c.带拷贝的创建数组

NSArray *arr1 = [[NSArray alloc]initWithArray:arr copyItems:NO];

2.通过类方法创建数组(与其它数据结构类似)

3.数组解析

a.数组可以装任意对象,存储的是对象的地址

b.私有对象,自定义对象打印调用的是description方法,字符串调用的也是description方法,打印的是本身

c.带拷贝的创建数组中,copyItems为NO时,和上面的通过数组创建数组是一样的,当为YES时,即深拷贝,相当于对对象进行复制,产生一个新的对象,那么就有两个指针分别指向两个对象。当一个对象改变或者被销毁后拷贝出来的新的对象不受影响.要实现深拷贝,Person对象需要实现NSCoping protocol,并且要实现copWithZone这个方法:

在Person类头文件中声明NSCoping协议,并且我们创建一个name属性

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCopying>
@property(copy) NSString *name;
@end

  在Person类实现类中实现copyWithZone方法

@implementation Person

-(id)copyWithZone:(NSZone *)zone
{
    Person *p = [Person allocWithZone:zone];
    p.name = self.name;
    return p;
}
@end

二.数组遍历

以数组arr为例

NSArray *arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",nil];

1.枚举器法

NSEnumerator *enu = [arr objectEnumerator];
id obj;
while(obj = [enu nextObject]){
NSLog(@"%@",obj);
}

2.快速遍历法

id obj;
for (obj in arr){
NSLog(@"%@",obj);
}

3.i遍历法

int i = 0;
int count = [arr count];
        
for(i;i< count;++i){
   NSLog(@"%@",[arr objectAtIndex:i]);
}

  输出结果:

2016-06-27 15:58:59.054 OcTest[953:696924] one
2016-06-27 15:58:59.055 OcTest[953:696924] two
2016-06-27 15:58:59.055 OcTest[953:696924] three
Program ended with exit code: 0

 

转载于:https://www.cnblogs.com/kaihuacheng/p/5616151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值