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