object-c中NSArray 的操作(1)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM