博客> Foundation->NSArray
Foundation->NSArray
2019-12-10 10:53 评论:0 阅读:947 xeiwenjian
ios Foundation

import

import "XWJPerson.h"

int main(int argc, const char * argv[]) { @autoreleasepool { // NSRange是开发中一个非常常用的类,那么他的本质是什么呢? typedef struct _NSRange{ NSUInteger location; NSUInteger length; }NSRange;

// 2.定义NSRange结构体变量的方式
    NSRange range;
    range.location = 2;
    range.location = 3;
// 方式2
    NSRange range2 = {2,3};
// 方式三
    NSRange range3 = {.location = 2,.length = 3};
// 上面的定义是不是觉得很烦躁?麻烦吧...那么看下面的终极写法

// NSRange range4 = NSMakeRange(2, 3); // 记得在上面两篇写过一些NSString常用的方法,在这还得花点笔墨来谈谈.. // 字符串的截取,非常重要 NSString xwj = @"道可道,非常道,名可名,非常名.无名天下之始,无名天下之母"; // 从指定的下标开始一直截取到最后一个字符串(包括标点符号也算一个下标); NSString xwj1 = [xwj substringFromIndex:2]; // 从头开始截取到指定个数的文字 NSString xwj2 = [xwj substringToIndex:3]; // 截取从指定范围的文字,从下标2开始截取3个 NSString xwj3 = [xwj substringWithRange:NSMakeRange(2, 3)]; // 在接着替换字符串 NSString xwj4 = @"爱她就要呵护她,就要包容她"; // 把指定的字符 替换成""也就是什么都没有 [xwj4 stringByReplacingOccurrencesOfString:@"荣她" withString:@""]; NSLog(@"%@",xwj4); // 把首尾两端的空格去掉. NSString xwj5 = @" 爱无 止境 "; // NSString xwj5 = [xwj5 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // 各位看官,是不是颠覆了你们的认知? // 这个只会报一个警告是因为,OC是一门弱语法的语言,任意指针指向任意对象 // NSMutableArray Mxwj = [NSMutableArray string]; // Mxwj = @"我最帅"; // [Mxwj addObject:@"我爱你"];// 奇葩了,这样居然也不报错. 原因是因为编译检查,编译器认为Mxwj是NSMutableString类型的,而这个类型有appendString这个方法. // 运行的崩溃的原因:运行检查,检查的是Mxwj这个指针是指向的真实类型是NSString 而NSString没有这个方法所以报错

/~~~NSMutableString和NSString相比之下最大的优势~~~~~~~~~~/ // NSMutableString创建的对象是可变的,当需要反复拼接/修改的时候,每次操作都在当前对象上进行的,不需要从新向内存申请空间来存储,这样效率更高.

    // 前面有总结,现在来复习一下NSArray的使用以及常用的知识点
    // 创建并且初始化一个对象

// XWJPerson xwj1 = [[XWJPerson alloc]init]; // XWJPerson xwj2 = [[XWJPerson alloc]init]; // XWJPerson xwj3 = [[XWJPerson alloc]init]; XWJPerson xwj01 = [[XWJPerson alloc]init]; XWJPerson xwj02 = [[XWJPerson alloc]init]; XWJPerson xwj03 = [[XWJPerson alloc]init];

    // 创建一个数组来 把对象存到数组里面去 后面添加niu以为这存储结束.如果在中途增加nil的话,编译器会把nil NULL看成是基本数据类型0,而数组是无法存储非OC对象的.这点需小心.
    NSArray *xwjArray = [NSArray arrayWithObjects:xwj01,xwj02,xwj03,@"你最帅", nil];
    NSLog(@"%@",xwjArray); // 可以使用%@来打印数组因为,数组里面存储的是OC对象
    // 如果数组里面包含了中文,会打印出unicode编码.
    // 这时候我们可以用一个第三方编写的分类来实现中文的效果.
    // 然而如果对象自定义重写description方法的话.如果方法中包含中文,单独打印数组中的元素可以打印出中文.
    [xwjArray objectAtIndex:1]; // 根据下标来找出元素
    // 判断数组内是否包含某一个对象
// - (BOOL)containsObject:(ObjectType)anObject;
  BOOL result = [xwjArray componentsJoinedByString:@"你最帅"];
    switch (result) {
        case 0: // 由于BOOL值只返回两个结果,要么0要么非0
            NSLog(@"没有!");
            break;
        default:
            NSLog(@"没有");
            break;
    }
    [xwjArray lastObject]; // 获取数组中最后一个元素
    [xwjArray objectAtIndex:xwjArray.count-1];// 这样也能获取不安全.
    [xwjArray firstObject];// 回去数组元素中第一个元素
    [xwjArray objectAtIndex:0];// 如果下标更改过很可能取到的值不是我们想要的
    // 好了谈了这么多,该说下,如何遍历数组中的元素了
    for(int i = 0; i < xwjArray.count; i++)
    { // 这个是我们最熟悉的普通遍历法
        NSLog(@"%@",xwjArray[i]);
    }
    // 增加for循环
    for(id obj in xwjArray)
    {
        NSLog(@"%@",obj); // 为什么非要用ID呢?因为数组可以存储任何OC对象,用ID不是更加安全吗?
    }
    // 利用Block来遍历系统自带的方法
    [xwjArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"%@",obj);
        // obj是对象,idx是下标  stop是停止条件.
        // 下一张的篇幅我准备重点给大伙分析分析Block 不喜勿喷..
    }];
    // 现在来谈下总结吧:NSMutableArray是NSArray的子类,NSArray拥有的所有方法.NSMutableArray,而且还拥有扩展的属性和方法
    // NSArray是不可变数组,所以NSArray创建的对象内部存储的元素不能进行增/删/改/但是NSMutableArray可以

   NSMutableArray *xwj1Array = [NSMutableArray arrayWithObjects:@"xie",@"wen",@"jian", nil];
    [xwj1Array addObject:@"iloveyou"]; // 新增
    [xwj1Array objectAtIndex:0];// 取出第零个下标
    [xwj1Array removeObjectAtIndex:1]; // 根据下标删除
    // 用数组存储对象的缺点
    // NSArray/NSMutableArray存储元素.如果需要存/取对象,都需要依赖下标
    // 当数组内元素有变动的时候,之前通过下标缺点的一个元素,现在就确定了.
   NSMutableArray *xwj2Array = [NSMutableArray arrayWithObjects:@"明",@"天",@"会",@"更",@"好", nil];
    [xwj2Array removeObject:0]; // 删除第零个
    [xwj2Array addObject:0]; // 取到零个.
    // 这时候下标已经发生变化了.

}
return 0;

}

收藏
0
sina weixin mail 回到顶部