下圖是要展示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; }