object-c中NSArray 的操作(1)

时间:2022-08-31 08:02:00

下图是要展示NSArray集合操作的一部分API

object-c中NSArray 的操作(1)

 

object-c中NSArray 的操作(1)

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其他函数的操作

 object-c中NSArray 的操作(1)

object-c中NSArray 的操作(1)

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