//

#import <Foundation/Foundation.h>

#import "Animal.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1. 创建方法
        //2. 排序
        //3. 取元素
        //4. 连接,分隔
        //5. 强引用
        //6. for...in
        
        Animal *ani = [[Animal alloc] init];
        ani.age = 12;
        
        
        
        //创建一个有三个元素的OC不可变数组
        //不可变数组的元素不能再变
//        NSArray *arr1 = @[@12, @"34", ani];
//        NSLog(@"%lu", arr1.count);
//        NSLog(@"%@", arr1);
        
        //不是修改数组
        ani.age = 20;
        
        Animal *ani10 = [[Animal alloc] init];
        ani10.age = 5;
        
        Animal *ani11 = [[Animal alloc] init];
        ani11.age = 48;
        
        NSArray *arr1 = @[ani, ani10, ani11];
        
        NSLog(@"%@", arr1);
        
        //排序,只需要实现两两之间比较的方法
        //SEL
        NSArray *arr10 = [arr1 sortedArrayUsingSelector:@selector(myCompare:)];
//        NSLog(@"%@", arr10);
        
        //依次执行print
        [arr10 makeObjectsPerformSelector:@selector(print)];
        //可以传递一个参数
        [arr10 makeObjectsPerformSelector:@selector(call:) withObject:@"Zhangsan"];
        
        //产生新数组,并且参数作为最后一个元素
        NSArray *arr30 = [arr10 arrayByAddingObject:@"aa"];
        NSLog(@"%p, %p", arr10, arr30);
        
        NSString *str10 = @"a.b.c";
        //分割字符串
        NSArray *arr40 = [str10 componentsSeparatedByString:@"."];
        NSLog(@"%@", arr40);
        
        //连接字符串
        NSString *str11 = [arr40 componentsJoinedByString:@"<+>"];
        NSLog(@"%@", str11);
        
//        NSArray *arr20 = @[@123, @"234", @345];
//        [arr20 writeToFile:@"/Users/apple/Desktop/test.plist" atomically:YES];
//        
//        NSArray *arr21 = [NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/test"];
//        NSLog(@"%@", arr21);
        
        
        return 0;
        
        NSNumber *num1 = arr1[0];
        NSLog(@"%@", num1);
        
        Animal *ani2 = [[Animal alloc] init];
        ani2.age = 20;
        NSNumber *num2 = @34;
        
        //检查是否包含某个对象
        if([arr1 containsObject:num2]) {
            NSLog(@"在arr1中");
            
            //获取对象的位置
            NSUInteger index = [arr1 indexOfObject:ani2];
            NSLog(@"%lu", index);
            if (NSNotFound == index) {
                NSLog(@"没zhaodao ");
            }
        }
        else {
            NSLog(@"不在");
        }
        
        return 0;
        
        NSLog(@"%lu", arr1.count);
        
//        ani = nil;
        
        //nil表示参数结束
        //数组中不能装nil对象
        arr1 = [[NSArray alloc] initWithObjects:@90, ani, @80, nil];
        NSLog(@"%@", arr1);
        
//        id cArr[4];
//        cArr[0] = @"abc";
//        cArr[1] = @"efg";
//        cArr[2] = ani;
//        cArr[3] = @"xxx";
        
//        arr1 = [[NSArray alloc] initWithObjects:cArr count:4];
//        NSLog(@"%@", arr1);
        
        //创建一个数组,并且用arr1中的元素初始化
        //实际上数组里装的是对象的指针,数组会对装入其中的对象产生一个强引用
        NSArray *arr2 = [NSArray arrayWithArray:arr1];
        NSLog(@"%lu", arr2.count);
        
        //根据位置获取对象
//        NSLog(@"%@", arr2[1]);
        NSLog(@"%@", [arr2 objectAtIndex:arr2.count - 1]);
        
        //获取第0个元素
        NSLog(@"%@", [arr2 firstObject]);
        //获取最后一个元素
        NSLog(@"%@", [arr2 lastObject]);
        
        NSLog(@"------");
        for (int i = 0; i < arr2.count; ++i) {
            NSLog(@"%@", arr2[i]);
        }
        
        //两个类型
        //1. 编译时类型,指针的类型
        //2. 运行时类型,对象的类型
        NSLog(@"+++++");
        
        arr2 = @[@12, ani, @34];
        //快速枚举
        for (id obj in arr2) {
            //检查一个对象是否为NSNumber类型
            if ([obj isKindOfClass:[NSNumber class]]) {
                NSNumber *num = (NSNumber *)obj;
                NSLog(@"%d", num.intValue);
            }
            else if ([obj isKindOfClass:[Animal class]]){
                Animal *animal = (Animal *)obj;
                NSLog(@"age: %d", animal.age);
            }
            
//            obj.age = 20;
        }
        
        ani = nil;
        arr1 = nil;
        arr2 = nil;
        
        NSLog(@"xxxxxxx");
    }
    
    NSLog(@"-----");
    return 0;
}

 

ios 中NSArray的更多相关文章

  1. 从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)

    从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray) deque deque双端队列,分段连续空间数据结构,由中控的map(与其说map,不如说是数 ...

  2. iOS中--NSArray调用方法详解 (李洪强)

    下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...

  3. IOS 中 NSArray

    今天在做 cordova  关于处理未读条数的插件时,需要在js中传入 int 型.  但是发现所有插件 里面的参数信息都是封装在NSArry对象里面.  因此又突然想直接在NSArry获取信息的想法 ...

  4. iOS中数据库应用基础

    iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...

  5. iOS 中的 HotFix 方案总结详解

    相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...

  6. iOS中获取各种文件的目录路径的方法

    我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...

  7. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  8. iOS:iOS中的多控制器管理

    iOS中的控制器有三种创建方式: 1.通过storyboard创建 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@" ...

  9. iOS中几种常用的数据存储方式

    自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

随机推荐

  1. PCA数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  2. hdu 1384 Intervals

    差分约束系统. 求最小值,用最长路来解决. #include<cstdio> #include<cstring> #include<cmath> #include& ...

  3. zoj 1718 poj 2031 Building a Space Station

    最小生成树,用了Kruskal算法.POJ上C++能过,G++不能过... 算出每两个圆心之间的距离,如果距离小于两半径之和,那么这两个圆心之间的距离直接等于0,否则等于距离-R[i]-R[j]. # ...

  4. 数据库 Mysql内容补充一

    mysql时间函数 --获取当前日期 select current_date(); --获取当前时间 select current_time(); --获取当前的日期和时间 select now(); ...

  5. c socket(续)

    存在两种字节顺序:NBO与HBO 网络字节顺序NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题. 主机字节顺序(HBO,Host ...

  6. javascript 奇淫巧技1

    1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2.使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但 ...

  7. JuneX_13

    在积分制的压力下,基本上能打的比赛都打了(除了忘了的).打了这么多比赛(其实也不多),发现有相当一部分题目考察的还是挺基础的内容,像搜索,DP,树,图,然而做的并不好.要么直接不会敲,要么调试大半天, ...

  8. JVM问题诊断常用命令:jinfo,jmap,jstack

    1.jinfo 描述:输出给定 java 进程所有的配置信息.包括 java 系统属性和 jvm 命令行标记等. 用法: jinfo [ option ] pid jinfo [ option ] e ...

  9. jxls导出EXCEL模板

    http://jxls.sourceforge.net/ InputStream templateInput = null; InputStream in = null; OutputStream o ...

  10. 洛谷-小鱼会有危险吗-BOSS战-入门综合练习2

    题目描述 Description 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测 ...