// // main.m // nsarray // // Created by 裴烨烽 on 14-1-30. // Copyright (c) 2014年 裴烨烽. All rights reserved. // #import <Foundation/Foundation.h> //这个数组是不能添加元素的,只能在创建的同时赋值。 void arrayCreate(){ //静态方法不需要管理内存 NSArray *array= [NSArray array]; //这样创建是没有数组的,是创建空的数组 array= [NSArray arrayWithObject:@"123"];//创建一个有1个元素的数组。 array= [NSArray arrayWithObjects:@"1",@"2",@"3", nil];//这里是创建一个有多个元素的数组 //nil在这里表示是一个结束符 //查询元素个数 // int count=[array count];//用来计算数组内部有多少个元素 //同上面等价 int count =array.count; NSLog(@"%i",count); // } //数组的简单使用 查询 void arrayUse(){ //判断字符数组中是否包含某元素 NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil]; if([array containsObject:@"1"]){ NSLog(@"包含了字符"); }else { NSLog(@"不包含该字符"); } //判断最后一个字符是什么 NSString *last=[array lastObject]; NSLog(@"last=%@",last); //根据某个索引值然后找到该位置的元素是什么 NSString *str=[array objectAtIndex:1]; NSLog(@"%@",str); //根据某个元素,查找到该元素的索引位置 //如果是负数,那么就是查找不倒。 int index=[array indexOfObject:@"2"]; NSLog(@"index=%i",index); //或者有一种方式就是arrary1中既可以放元素,也可以放数组 NSObject *obj=[[NSObject alloc] init]; NSArray *array1=[NSArray arrayWithObjects:@"a",@"b",@"c",obj, nil]; NSLog(@"%@",array1); } //数组内存管理 /* void arrayMemory(){ Student *stu1=[[Student alloc]init]; Student *stu2=[[Student alloc]init]; Student *stu3=[[Student alloc]init]; NSLog(@"stu1:%zi",[stu1 retainCount]); //当吧一个对象塞进数组中时,这个对象的计数器会加1;也就是说数组会对它做一次retain操作 NSArray *array=[[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil]; NSLog(@"stu1:%zi",[stu1 retainCount]); NSLog(@"count=%zi",array.count); //数组被销毁的时候,会对内部的所有元素都做一次release操作; [array release]; [stu1 release]; [stu2 release]; [stu3 release]; } */ //给数组里面的元素发送消息 /* void arrayMessage(){ Student *stu1=[Student student]; Student *stu2=[Student student]; Student *stu3=[Student student]; NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3, nil]; [array makeObjectsPerformSelector:@selector(test)];//使他里面的所有对象都调用某方法 } */ /* //判断比较两个数组 void arrayequal(){ //比较两个集合内容是否相同 -(BOOL)isEqualToArray:(NSArray *)otherArray //返回两个集合中第一个相同的对象元素 -(id)firstObjectCommonWithArray:(NSArray *)otherArray // } */ //数组的遍历 void arrayFor(){ NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil]; int count =array.count; for(int i=0;i<count;i++) { id obj=[array objectAtIndex:i]; NSLog(@"%i-%@",i,obj); } } //快速遍历2 void arrayFor2(){ NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil]; int i=0; for(id obj in array){ NSLog(@"%i-%@",i,obj); i++; } } //快速遍历3 void arrayFor3(){ NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { //每遍历一个元素都会调用一次block //利用指针修改外面bool变量值 if(idx==1){ *stop=YES;//传入一个stop指针让内部能进行修改 } NSLog(@"%i-%@",idx,obj); }]; } //使用迭代器进行数组遍历 void arrayFor4(){ NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil]; // NSEnumerator *enumerator=[array objectEnumerator];//获取数组的迭代器 //反序迭代器,从尾部开始进行遍历 NSEnumerator *enumerator=[array reverseObjectEnumerator]; [enumerator nextObject];//取得下一个需要遍历的元素 id obj=nil; while (obj=[enumerator nextObject]) { NSLog(@"obj=%@",obj); } //返回迭代器中的所有元素 NSArray *array2=[enumerator allObjects]; NSLog(@"array2:%@",array2); } int main(int argc, const char * argv[]) { @autoreleasepool { // arrayCreate(); // arrayUse(); // arrayMemory(); //arrayMessage(); arrayFor4(); } return 0; }