// // main.m // NSArray // // Created by dingxiaowei on 13-5-12. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" void arrayCreate(){ //静态创建数组,a不需要我们管理内存 NSArray *array=[NSArray array]; array = [NSArray arrayWithObject:@"abc"]; array=[NSArray arrayWithObjects:@"d",@"e",@"f",nil]; NSLog(@"%@",array); NSLog(@"数组的元素个数:%zi",[array count]); } void arrayUse(){ NSArray *obj=[[[NSArray alloc] init] autorelease]; NSArray *array=[NSArray arrayWithObjects:@"a",@"b",@"c",obj,nil]; if([array containsObject:@"a"]){ NSLog(@"数组中包含了a元素"); } NSLog(@"最后一个元素是:%@",[array lastObject]); NSLog(@"第2个元素是:%@",[array objectAtIndex:1]); NSLog(@"c元素的位置:%zi",[array indexOfObject:@"c"]+1); } #pragma mark - 数组的内存管理 void arrayMemory(){ Student *stu1=[[Student alloc] init]; Student *stu2=[[Student alloc] init]; Student *stu3=[[Student alloc] init]; NSLog(@"stu1的计数器%i",[stu1 retainCount]); //注意:将一个OC对象塞给array之后,这个对象的计数器加1 NSArray *array=[[NSArray alloc] initWithObjects:stu1,stu2,stu3,nil]; //注意:将一个OC对象塞给array之后,这个对象的计数器加1 NSLog(@"stu1的计数器%i",[stu1 retainCount]); NSLog(@"元素个数:%zi",array.count); [stu1 release]; [stu2 release]; [stu3 release]; [array release]; } #pragma mark - 给数组里面的元素发送信息 void arrayMessage(){ Student *stu1=[Student student]; Student *stu2=[Student student]; Student *stu3=[Student student]; NSArray * array=[NSArray arrayWithObjects:stu1,stu2,stu3, nil];//静态方法不需要我们管理内存 //将array里面多有对象都调用一次test方法 //[array makeObjectsPerformSelector:@selector(test)]; [array makeObjectsPerformSelector:@selector(test:) withObject:@"123"]; //注意冒号也是方法名的一部分,这个顶多只支持传一个参数 } #pragma mark - 遍历数组1(基本for循环遍历) void arrayFor1(){ Student *stu1=[Student student]; NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中 int count=array.count; //得到数组的元素个数 for(int i=0;i<count;i++){ //返回id id obj=[array objectAtIndex:i]; //id=void * NSLog(@"%->%@",i,obj); } } #pragma mark - 遍历数组2(快速遍历) void arrayFor2(){ Student *stu1=[Student student]; NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中 //快速遍历 int i=0; for(id obj in array){ NSLog(@"%->%@",i,obj); i++; } } #pragma mark - 遍历数组3(用Block遍历) void arrayFor3(){ Student *stu1=[Student student]; NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中 //用Block遍历 [array enumerateObjectsUsingBlok:^(id obj,NSUinter idx,BOOL *stop){ NSLog(@"%i-%@",idx,obj); if(idx==2){ //利用指针变量修改外面BOOL的值 *stop=YES;//调用指针参数 改变外面的变量 终止循环 } }]; } #pragma mark - 遍历数组4(用迭代器遍历) void arrayFor4(){ Student *stu1=[Student student]; NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中 //用迭代器遍历数组 //获取数组的迭代器 NSEnumerator *enumerator=[array objectEnumerator]; // //取得下一个对象 // [enumerator nextObject]; id obj=nil; if(obj=[enumerator nextObject]){ NSLog(@"obj=%@",obj); } // //返回迭代器中所有的元素 // [array allObjects]; //注意:这个方法只能返回没由遍历过的,要使用这种方法返回所有的对象,就放在nextObject方法之前!!! NSArray * array2=[array allObjects]; NSLog(@"array2:%@",array2); } int main(int argc, const char * argv[]) { @autoreleasepool { arrayCreate(); arrayUse(); arrayMemory(); arrayFor1(); arrayFor2(); arrayFor3(); arrayFor4(); } return 0; }