zoukankan      html  css  js  c++  java
  • NSArray创建和使用

    //
    //  main.m
    //  NSArray
    //
    //  Created by dingxiaowei on 13-5-12.
    //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Student.h"
    void arrayCreate(){
        //静态创建数组,a不需要我们管理内存
        NSArray *array=[NSArray array];
        array = [NSArray arrayWithObject:@"abc"];
        array=[NSArray arrayWithObjects:@"d",@"e",@"f",nil];
        NSLog(@"%@",array);
        NSLog(@"数组的元素个数:%zi",[array count]);
    }
    
    void arrayUse(){
        NSArray *obj=[[[NSArray alloc] init] autorelease];
        NSArray *array=[NSArray arrayWithObjects:@"a",@"b",@"c",obj,nil];
        if([array containsObject:@"a"]){
            NSLog(@"数组中包含了a元素");
        }
    
        NSLog(@"最后一个元素是:%@",[array lastObject]);
    
        NSLog(@"第2个元素是:%@",[array objectAtIndex:1]);
    
        NSLog(@"c元素的位置:%zi",[array indexOfObject:@"c"]+1);
    }
    #pragma mark - 数组的内存管理
    void arrayMemory(){
        Student *stu1=[[Student alloc] init];
        Student *stu2=[[Student alloc] init];
        Student *stu3=[[Student alloc] init];
        NSLog(@"stu1的计数器%i",[stu1 retainCount]);
        //注意:将一个OC对象塞给array之后,这个对象的计数器加1
        NSArray *array=[[NSArray alloc] initWithObjects:stu1,stu2,stu3,nil]; //注意:将一个OC对象塞给array之后,这个对象的计数器加1
        NSLog(@"stu1的计数器%i",[stu1 retainCount]);
        NSLog(@"元素个数:%zi",array.count);
    
        [stu1 release];
        [stu2 release];
        [stu3 release];
        [array release];
    }
    #pragma mark - 给数组里面的元素发送信息
    void arrayMessage(){
        Student *stu1=[Student student];
        Student *stu2=[Student student];
        Student *stu3=[Student student];
        NSArray * array=[NSArray arrayWithObjects:stu1,stu2,stu3, nil];//静态方法不需要我们管理内存
        //将array里面多有对象都调用一次test方法
        //[array makeObjectsPerformSelector:@selector(test)];
        [array makeObjectsPerformSelector:@selector(test:) withObject:@"123"];  //注意冒号也是方法名的一部分,这个顶多只支持传一个参数
    }
    
    #pragma mark - 遍历数组1(基本for循环遍历)
    void arrayFor1(){
        Student *stu1=[Student student];
        NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
        int count=array.count; //得到数组的元素个数
        for(int i=0;i<count;i++){ //返回id
            id obj=[array objectAtIndex:i];    //id=void *
            NSLog(@"%->%@",i,obj);
        }
    }
    #pragma mark - 遍历数组2(快速遍历)
    void arrayFor2(){
        Student *stu1=[Student student];
        NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
        //快速遍历
        int i=0;
        for(id obj in array){
            NSLog(@"%->%@",i,obj);
            i++;
        }
    }
    #pragma mark - 遍历数组3(用Block遍历)
    void arrayFor3(){
        Student *stu1=[Student student];
        NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
        //用Block遍历
        [array enumerateObjectsUsingBlok:^(id obj,NSUinter idx,BOOL *stop){
            NSLog(@"%i-%@",idx,obj);
            if(idx==2){
                //利用指针变量修改外面BOOL的值
                *stop=YES;//调用指针参数   改变外面的变量   终止循环
            }
        }];
        
    }
    #pragma mark - 遍历数组4(用迭代器遍历)
    void arrayFor4(){
        Student *stu1=[Student student];
        NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",stu1,nil];//任何OC对象都可以塞进数组中
        //用迭代器遍历数组
        //获取数组的迭代器
        NSEnumerator *enumerator=[array objectEnumerator];
    //    //取得下一个对象
    //    [enumerator nextObject];
        id obj=nil;
        if(obj=[enumerator nextObject]){
            NSLog(@"obj=%@",obj);
        }
    //    //返回迭代器中所有的元素
    //    [array allObjects];
        //注意:这个方法只能返回没由遍历过的,要使用这种方法返回所有的对象,就放在nextObject方法之前!!!
        NSArray * array2=[array allObjects];
        NSLog(@"array2:%@",array2);
    }
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            arrayCreate();
            arrayUse();
            arrayMemory();
            arrayFor1();
            arrayFor2();
            arrayFor3();
            arrayFor4();
        }
        return 0;
    }
  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3076005.html
Copyright © 2011-2022 走看看