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;
}