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