//
// main.m
// 数组的创建和遍历
//
#import <Foundation/Foundation.h>
#import "Person.h"
#pragma mark 创建数组的方法
void createArray(){
//创建空数组,这个数组中没有元素,且不可以添加
NSArray *arr = [NSArray array];
//创建只有一个元素的数组
arr = [NSArray arrayWithObject:@"ddd"];
//创建有多个元素的数组(nil代表数组的结束)
arr = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
arr = [[NSArray alloc] initWithObjects:@"abc", @"123", @"555", @"efg", nil];
NSLog(@"数组的元素个数有:%zi", arr.count);
[arr release];
}
#pragma mark 数组的简单使用
void useArray(){
NSArray *arr = [NSArray arrayWithObjects:@"abc", @"123", @"555", @"efg", nil];
//查看数组中是否有某元素
if ([arr containsObject:@"123"]) {
NSLog(@"数组中存在此元素");
}else{
NSLog(@"数组中不存在此元素");
}
//获取数组中的最后一个元素
NSLog(@"数组中最后一个元素是%@", [arr lastObject]);
//取出数组中指定位置的元素
NSLog(@"第三个元素是:%@", [arr objectAtIndex:2]);
//元素在数组中的位置
NSLog(@"123在数组中的%zi", [arr indexOfObject:@"123"]);
}
#pragma mark 数组的内存管理
void arrayMemery(){
//person静态方法中初始化了
Person *p = [Person person];
Person *p1 = [Person person];
Person *p2 = [Person person];
//当一个对象加入到数组中是,这个对象的计数器会加1
NSLog(@"%zi", [p retainCount]);
NSArray *arr = [[NSArray alloc] initWithObjects:p, p1, p2, nil];
NSLog(@"%zi", [p retainCount]);
//当数组销毁时,所有数组中的对象计数器都会减1
NSLog(@"数组中的元素个数是%zi", arr.count);
[arr release];
NSLog(@"%zi", [p retainCount]);
}
#pragma mark 给数组中的所有元素发送消息(都调用一个方法)
void arrayMessage(){
Person *p = [Person person];
Person *p1 = [Person person];
Person *p2 = [Person person];
NSArray *arr = [NSArray arrayWithObjects:p, p1, p2, nil];
[arr makeObjectsPerformSelector:@selector(test)];
[arr makeObjectsPerformSelector:@selector(test1:) withObject:@"Hello!"];
}
#pragma mark 遍历数组的第一种方法
void arrayFor1(){
NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"a", @"b" , nil];
NSUInteger len = arr.count;
for (int i = 0 ; i<len ; i++) {
NSLog(@"数组中第%i个元素是:%@", i+1 , [arr objectAtIndex:i]);
}
}
#pragma mark 遍历数组的第二种方法
void arrayFor2(){
NSArray *arr = [NSArray arrayWithObjects:@"11", @"22", @"aa", @"bb" , nil];
int i = 0;
for (id obj in arr) {
NSLog(@"数组中第%i个元素是:%@", i+1 , obj);
i++;
}
}
#pragma mark 遍历数组的第三种方法(block)
void arrayFor3(){
Person *p = [Person person];
NSArray *arr = [NSArray arrayWithObjects:p, @"11", @"22", @"aa", @"bb", @"cc" , nil];
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"数组中第%zi个元素是:%@",idx+1 , obj);
if (idx == 3) {
*stop = YES;
}
}];
}
#pragma mark 遍历数组的第四种方法(迭代器)
void arrayFor4(){
Person *p = [Person person];
NSArray *arr = [NSArray arrayWithObjects:p, @"11", @"22", @"aa", @"bb", @"cc" , nil];
//获取数组的迭代器
NSEnumerator *enu = [arr objectEnumerator];
//获取数组反向的迭代器,从最后一个元素开始遍历
//NSEnumerator *enu = [arr reverseObjectEnumerator];
NSObject *obj = nil;
int i = 0;
//返回数组迭代器中的所有元素,必须放在nextObject之前才会有,不然不会有值
NSArray *arr1 = [enu allObjects];
NSLog(@"%@", arr1);
while (obj = [enu nextObject]) {
NSLog(@"数组中第%zi个元素是:%@",i+1 , obj);
i++;
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
//createArray();
//useArray();
//arrayMemery();
//arrayMessage();
//arrayFor1();
//arrayFor2();
//arrayFor3();
arrayFor4();
}
return 0;
}