Objective-c入门-NSArray(5)

NSArray实例可以保存一组指向其他对象的指针

一、创建数组

NSArray也可以用字面量语法创建实例。数组的内容写在方括号里面,前面带有@。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* now = [[NSDate alloc] init];
        NSDate* tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
        NSDate* yesterday = [now dateByAddingTimeInterval:-24.0 * 60.0 * 60.0];
        NSArray* dateList = @[now, tomorrow, yesterday];
    }
    return 0;
}

NSArray的实例是无法改变的。一旦NSArray实例被创建后,就无法添加或删除数组里的指针,也无法改变数组的指针顺序。

二、存取数组

NSArray中的指针是有序排列的,可以通过相应的索引来存取。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* now = [[NSDate alloc] init];
        NSDate* tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
        NSDate* yesterday = [now dateByAddingTimeInterval:-24.0 * 60.0 * 60.0];
        NSArray* dateList = @[now, tomorrow, yesterday];
        //输出其中的两个对象
        NSLog(@"The first date is %@", dateList[0]);
        NSLog(@"The third date is %@", dateList[2]);
        //查看包含多少个对象,count方法会返回NSArray对象所含指针的个数
        NSLog(@"There are %lu dates", [dateList count]); //3
        
        //如果超出范围,程序就会崩溃
        NSLog(@"The fourth date is %@", dateList[3]);
    }
    return 0;
}

如果想要了解count方法的功能,可以查看NSArray类参考页。

三、遍历数组

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* now = [[NSDate alloc] init];
        NSDate* tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
        NSDate* yesterday = [now dateByAddingTimeInterval:-24.0 * 60.0 * 60.0];
        NSArray* dateList = @[now, tomorrow, yesterday];
        NSInteger dateCount = [dateList count];
        //for循环对数组的元素进行了计数来控制循环的次数,以避免发生超出范围的错误
        for(int i = 0; i < dateCount; i++) {
            NSDate* d = dateList[i];
            NSLog(@"Here is a date : %@", d);
        }
        //还可以根据快速枚举的方法来遍历数组中的元素
        for(NSDate* d in dateList) {
            NSLog(@"Here is a date : %@", d);
        }
    }
    return 0;
}

四、NSMutableArray

NSMutableArray和NSArray实例类似,但是可以添加、删除或对指针重新进行排序。

NSMutableArray是NSArray的子类

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* now = [[NSDate alloc] init];
        NSDate* tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
        NSDate* yesterday = [now dateByAddingTimeInterval:-24.0 * 60.0 * 60.0];
        //创建空数组,使用array类方法来创建NSMutableArray
        NSMutableArray* dateList = [NSMutableArray array];
        //将两个NSDate对象加入到空数组中
        [dateList addObject:now];
        [dateList addObject:tomorrow];
        //将yesterday指针插入数组的起始位置
        [dateList insertObject:yesterday atIndex:0];
        //遍历数组
        for(NSDate* d in dateList) {
            NSLog(@"Here is a date : %@", d);
        }
        //删除yesterday指针
        [dateList removeObjectAtIndex:0];
        //此时再查看第一个元素是什么
        NSLog(@"The first date is %@", dateList[0]); //输出now的信息
    }
    return 0;
}

使用快速枚举遍历NSMutableArray时,不能在美剧过程中增加或者删除数组中的指针。如果遍历时需要添加和删除指针,则需要使用标准的for循环来进行操作。

五、练习

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //先创建一个空的NSMutableArray数组
        NSMutableArray* foodList = [NSMutableArray array];
        //购物清单中的内容使用NSString类型
        NSString* bread = @"Loaf of bread";
        NSString* milk = @"Container of milk";
        NSString* butter = @"Stick of butter";
        [foodList addObject:bread];
        [foodList addObject:milk];
        [foodList addObject:butter];
        for(NSString* food in foodList) {
            NSLog(@"%@", food);
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值