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