• 数组和类别




    【说明】
        OC中使用两种数组,使用C的数组存放基本数据类型的数据或地址;
        使用OC的数组存放OC的对象地址。

    一、不可变数组(NSArray)
    1、创建
    NSArray *ary1 = [[NSArray alloc]     
            initWithObjects:@"one",@"two",@"three",nil];
    NSArray *ary2 = [NSArray
            arrayWithObjects:@"123",@"456",@"789",nil];
    NSArray *ary3 = [[NSArray alloc] initWithArray:ary1];
    NSArray *ary4 = [NSArray arrayWithArray:ary2];
    //结尾不需要nil
    NSArray *ary5 = @[@"abc",@"def",@"hij"];

    2、字符串分割
    //按照指定的字符串进行切割
    NSArray *ary = [str componentsSeparatedByString:@"an"];
    //按照指定的字符集合
    NSCharacterSet *charSet = [NSCharacterSet
                characterSetWithCharactersInString:@"oa"];
    NSArray *ary2 = [str
            componentsSeparatedByCharactersInSet:charSet];

    3、字符串的拼接
    //按照指定的字符串进行拼接
    NSString *str2 = [ary componentsJoinedByString:@"*"];

    4、获取元素个数
    NSUInteger count = [ary count];

    5、获取单个元素
    //返回指定的元素
    id obj = [ary objectAtIndex:1];
    NSLog(@"%@", ary[0]);

    6、数组的遍历
    //遍历数组
    for (int i=0; i<[ary count]; i++) {
        NSLog(@"%@", ary[i]);
    }
    //快速遍历
    for (id obj in ary) {
        //obj每次循环指向数组中的一个元素,依次向后
        NSLog(@"%@",obj);
    }
    说明:
        1、在for-in中,break和continue同样可以使用
        2、在遍历过程中,不能修改数组

    7、获取指定对象的索引
    //查看对象在数组中的索引,找不到返回NSNotFound
    NSUInteger index = [ary indexOfObject:@"too"];

    8、判断是否包含指定对象
    BOOL ret = [ary containsObject:@"too"];

    二、可变数组(NSMutableArray)
    1、设置(set)
    [mAry setArray:@[@"one",@"two",@"three"]];

    2、增加(add)
    [mAry addObject:@"four"];
    [mAry addObjectsFromArray:@[@"250",@"3"]];

    3、插入(insert)
    //在指定位置插入元素
    [mAry insertObject:@"2" atIndex:2];

    4、删除(remove)
    //删除最后一个元素
    [mAry removeLastObject];
    //删除指定元素
    [mAry removeObject:@"250"];
    //删除指定位置的元素
    [mAry removeObjectAtIndex:2];
    //删除指定范围内的指定元素
    [mAry removeObject:@"250" inRange:NSMakeRange(3, 3)];
    //删除指定范围内的所有元素
    [mAry removeObjectsInRange:NSMakeRange(2, 3)];
    //删除某个数组指定的元素
    [mAry removeObjectsInArray:@[@"250",@"2"]];
    //删除所有元素
    [mAry removeAllObjects];

    5、替换(replace)
    [mAry replaceObjectAtIndex:0 withObject:@"one"];

    6、交换(exchange)
    [mAry exchangeObjectAtIndex:0 withObjectAtIndex:2];

    三、类别(Category)
    【认识类别】
        给某个类打补丁的一个工具,也可分类管理成员方法

    @interface NSString (Print)
    - (void)print;
    @end

    @implementation NSString (Print)
    - (void)print
    {
        NSLog(@"%@", self);
    }
    @end

    【使用说明】
        1、只能添加成员方法,不能添加成员变量,可以使用原类的成员变量
        2、给某个类添加一个类别相当于直接添加到原类中,
                但是并不会修改原类,其子类也可使用类别中的方法
        3、如只需在一个源文件中使用类别,可以将类别的接口
                和实现放在同一文件(当前源文件)中
        4、形如(3)的情况,可以省略类别的接口部分
        
    【匿名类别】—— 类别的仕途不顺的远亲
        形式上省略名字的类别,也叫扩展,但是其作用于类别完全不同

    【作用】
        1、成员方法的相互调用,以前只能下调上
        ==> 编译器已经支持相互调用
        2、添加不公开的成员变量
        ==> 可以放在实现部分的最上面
        3、声明不公开的成员方法
        ==> 方法只需实现不声明即可

    四、零碎知识
    【类(Class)】
        说明:
        1、Class是一种数据类型
        2、Class类型的变量用于存放类的类型

        使用:
        1、创建Class类型的变量
               //创建Class类型的变量(编译时)
        Class cls = [NSString class];
        //动态的创建(运行时)
        Class cls2 = NSClassFromString(@"NSString");
        2、可以创建特定类型的对象
                NSString *str = [cls stringWithString:@"hello"];
        3、可以判断某个对象是否属于某个类

    【description方法】
        %@可以打印对象,其实打印的是description方法的返回;
        若不实现,默认打印对象的【类名+地址】

    【数字类(NSNumber)】
        1、创建
           NSNumber *num1 = [[NSNumber alloc] initWithInt:250];
       NSNumber *num2 = [NSNumber numberWithFloat:3.14];
        2、转化为数值
           int value = [newNum intValue];
        3、转化为字符串
           NSString *str = [num2 stringValue];
        4、判断数字对象是否相等
           BOOL ret = [num1 isEqualToNumber:num2];
        5、比较数字对象的大小关系
            NSComparisonResult ret2 = [num1 compare:num2];

    练习题:
    1、创建一个数组,元素是@“One”,@“Two”,@“Three”,
            使用多种方法遍历打印数组的元素。
    2、创建一个数组,元素是5个Dog类的对象地址,遍历数组,
            使每个元素执行bark函数。
    3、创建一个数组,元素是两个字符串对象地址和三个Dog类的对象地址,
          遍历数组;如果是字符串那么输出"I am a string!"
          如果是 Dog 类的对象那么执行 bark 方法。
    4、设计⼀个学生类,成员有姓名,年龄,学号,成绩。 要求,以上述
            每⼀成员,分别进行排序(学号按升序,成绩按降序,年龄升序,    
            名字降序)。
    5、将一个字符串 @"我 爱 总 复 习" 按单词逆序,
            已知字符串中单词只通过空格分隔
            - (void)reverseWordsInString:(NSMutableString *)str;
    6、有两个字符串@"This is a boy";@"really fucking bad";
            将这两个字符串单词,交叠,形成新的字符串
            @"This really is fucking a  bad boy"。

  • 相关阅读:
    Git常用命令集合
    kubeadm搭建高可用集群-版本1.18.2
    springboot实现事务管理
    定时任务突然中止,告警:Thread starvation or clock leap detected
    Class版本号和Java版本对应关系
    vue开发环境配置
    CentOS配置jar应用程序开机启动的方法
    jvm运行时数据区之程序计数器
    JVM常见面试题及答案
    MYSQL的修改表结构SQL语句
  • 原文地址:https://www.cnblogs.com/rainwz/p/4589022.html
Copyright © 2020-2023  润新知