下图是要展示NSArray集合操作的一部分API
1:首先提供student.h
// // Student.h // NSArray复习01 // // Created by ganchaobo on 13-4-25. // Copyright (c) 2013年 ganchaobo. All rights reserved. // #import <Foundation/Foundation.h> typedef void (^MySum)(id); @interface Student : NSObject @property(nonatomic ,retain) NSString * name; -(id)InitWithName:(NSString *) Name;//自定义动态构造函数(模仿系统) +(id)StudentWithName:(NSString *) Name;//自定义静态构造方法 模仿系统) -(void)print; -(void)print:(id) msg; -(void)Test:(void (^)(id aa)) block ; @end
2:在提供student.m
// // Student.m // NSArray复习01 // // Created by ganchaobo on 13-4-25. // Copyright (c) 2013年 ganchaobo. All rights reserved. // #import "Student.h" @implementation Student @synthesize name=_name; -(id)InitWithName:(NSString *)Name{ self=[super init]; if(self){ self.name=Name; } return self; } +(id)StudentWithName:(NSString *)Name{ return [[[Student alloc] InitWithName:Name] autorelease]; } -(void)dealloc{ NSLog(@"Student 对象被销毁%@",self);//此时发送descript方法 [super dealloc]; } #pragma mark - 重写descript方法 -(NSString *)description{ return [NSString stringWithFormat:@"name-->%@",self.name]; } -(void)print{ NSLog(@"print -->%@",self.name); } -(void)print:(id)msg{ NSLog(@"print:--->%@ -->%@",msg,self.name); } -(void)Test:(void (^)(id))block{//匿名block 对象 // MySum MM=block; // MM(@"11"); // block=^(id aa){ // NSLog(@"%@",self); // }; block(self.name); } @end
3:NSArray的操作
// // main.m // NSArray复习01 // // Created by ganchaobo on 13-4-25. // Copyright (c) 2013年 ganchaobo. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" //NSArray管理对象内存机制 即对象存放到NSArray里面的时候 对象retain一次,当对象从NSArray中移除的时候 对象release一次 void NSArrayObjectCount(){ Student *stu1=[Student StudentWithName:@"ABC"]; NSLog(@"student--->%@,计数器%zi",stu1,[stu1 retainCount]); NSArray *arr=[[NSArray alloc] initWithObjects:stu1, nil] ;//第一中创建NSArray方法 NSLog(@"student--->%@,计数器%zi",stu1,[stu1 retainCount]); NSLog(@"before arr release"); [arr release]; NSLog(@"after arr release"); NSLog(@"student--->%@,计数器%zi",stu1,[stu1 retainCount]); } //创建NSArray的方法 :NSArray是有序的集合,不可变 void CreateArray(){ //第一种创建NSSArray 方法 NSArray *arr1=[[[NSArray alloc] initWithObjects:@"123",@"123",nil] autorelease];//NSArray 里面只能放obejct-c对象,其中nil只是NSArray集合结尾的标识,没有实际意思 NSLog(@"%@",arr1); //第二种创建NSArray方法 NSArray *arr2=[NSArray arrayWithObjects:@"234",@"345", nil]; NSLog(@"%@",arr2); //第三种创建NSArray 对象,但是只有只有一个集合的NSArray NSArray *arr3=[NSArray arrayWithObject:@"123"]; NSLog(@"%@",arr3); } //NSArray的查询 void NSArrayQuery(){ NSArray *arr=[NSArray arrayWithObjects:@"abc",@"Act",@"AED",@"AFG", nil]; NSLog(@"%zi",[arr count]);//计算NSArray集合的个数 NSLog(@"%@",[arr lastObject]);//求NSArray集合种的最后一个元素 NSLog(@"%@",[arr objectAtIndex:1]);//根据索引得到指定的对象 NSLog(@"%i",[arr containsObject:@"abc"]);//是否包含某个元素 NSLog(@"%zi",[arr indexOfObject:@"AED"]);//匹配对象返回对象所在集合的索引 NSLog(@"%zi",[arr indexOfObject:@"AFG" inRange:NSMakeRange(2, 2)]); //集合比较 NSLog(@"集合"); NSArray *arr1=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; NSLog(@"%zi",[arr1 isEqualToArray:arr]);//比较两个集合是否相同 NSLog(@"%@",[arr1 firstObjectCommonWithArray:arr]);//返回两个集合种第一个相同的对象 } //给NSArray发送消息 void NSArraySend(){ Student *stu1=[Student StudentWithName:@"JACK"]; Student *stu2=[Student StudentWithName:@"Mike"]; NSArray *arr=[NSArray arrayWithObjects:stu1,stu2, nil]; [arr makeObjectsPerformSelector:@selector(print)];//让集合中的每个对象执行print 方法 [arr makeObjectsPerformSelector:@selector(print:) withObject:@"Good"]; } //第一种排序:经典for循环 void ArrayFor1(){ NSArray *arr=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; NSUInteger count= [arr count]; for(int i=0;i<count;i++){ id obj=[arr objectAtIndex:i ]; NSLog(@"index=%i,%@",i,obj); } } //第二种排序:c#种foreach void ArrayFor2(){ NSArray *arr=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; for( id obj in arr){ NSLog(@"%@",obj); } } //第三种排序:迭代器 void ArrayFor3(){ NSArray *arr=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; id obj=nil; NSEnumerator *enumerator= [arr objectEnumerator];//得到集合的迭代器 while(obj=[enumerator nextObject]) { NSLog(@"%@",obj); } } //第4中排序:迭代器(1)倒序迭代器 void ArrayFor4(){ NSArray *arr=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; id obj=nil; NSEnumerator *enumerator=[arr reverseObjectEnumerator];//得到集合的倒序迭代器 while(obj=[enumerator nextObject]){ NSLog(@"%@",obj); } } //第5种排序 ^block void ArrayFor5(){ NSArray *arr=[NSArray arrayWithObjects:@"AA",@"Act",@"AED",@"AFG", nil]; // [arr enumerateObjectsUsingBlock:<#^(id obj, NSUInteger idx, BOOL *stop)block#>] [arr enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){ NSLog(@"%@",obj); }]; } int main(int argc, const char * argv[]) { @autoreleasepool { Student *STU=[Student StudentWithName:@"MIKE"]; [STU Test:^(id str){ NSLog(@"%@",str);//blcok的机 }]; // ArrayFor4(); } return 0; }
NSArray其他函数的操作
//NSArray中的迭代器 void Enumerator(){ NSArray *arr=[NSArray arrayWithObjects:@"123",@"234",@"567", nil]; NSEnumerator * Enumerator= [arr objectEnumerator];//得到集合的迭代器 NSLog(@"%@",[Enumerator nextObject]);//获取迭代器的下一个元素 NSLog(@"%@",[Enumerator allObjects]);//通过迭代器获取NSArray的元素 } //NSArray中派生出来新的类 void MustArray(){ NSArray *arr=[NSArray arrayWithObjects:@"123",@"234",@"567", nil];//arr指向的数组是不可变的。 NSArray *arr1=[arr arrayByAddingObject:@"ABC"];//添加一个元素返回新的元素,arr元素没有变化(笔者猜测里面是用指针操作) NSLog(@"%@",arr1); NSArray *arr2=[NSArray arrayWithObjects:@"AC",@"AD",@"AE", nil];//arr2指向的数组是不可变的。 NSArray *arr3=[arr2 arrayByAddingObjectsFromArray:arr];//添加一个数组,返回新的数组 NSLog(@"%@",arr3); NSArray *arr4=[arr2 subarrayWithRange:NSMakeRange(1, 2)]; NSLog(@"%@",arr4); } //NSArray的其他操作 void otherArray(){ NSArray *arr2=[NSArray arrayWithObjects:@"AC",@"AD",@"AE", nil];//arr2指向的数组是不可变的。 NSString *str=[arr2 componentsJoinedByString:@"-"];//将一个NSArray已“-”分割符号拼接成一个字符串 NSLog(@"%@",str); } int main(int argc, const char * argv[]) { @autoreleasepool { // Enumerator(); //MustArray(); otherArray(); } return 0; }