• 选择器


    ==========================

    选择器

    ==========================

    【认识选择器】

    SEL

    1.选择器(SEL)是一个变量类型。

    2.选择器用来装成员消息(成员方法)

    people* manInBlack = [[people alloc]init];

     // SEL 是一个选择器类型,好比int a,int 是一个整型

    // 创建了一个选择器sel,sel装了manInBlack中的printName方法

    SEL sel = @selector(printName);

     // 执行选择器

    [manInBlack performSelector:sel];

    // 执行一个带参数的选择器方法

    // 多了一个冒号

    SEL sel1 = @selector(printName:);

    [manInBlack performSelector: sel1 withObject: @"我是黑衣人,我会隐身"];

    // [manInBlack printName: @"我长大了" withAge: @"25岁"];

      

    // 创建一个带2个参数的选择器

    SEL sel2 = @selector(printName:withAge:);

    // 执行一个带2个参数的选择器

    [manInBlack performSelector: sel2 withObject: @"我长大了" withObject: @"5岁"];

    //【注】选择器方法,最多带2个参数

    二.选择器的作用

    1.选择器支持ios开发,事件的相应机制。

    2.选择器可用于方法的回调(代理)

    3.选择器可以另一个方法实现多个功能,实现代码重用。

    // 编译时确定调用哪个方法

    SEL sel = @selector(test1);

    // NSSelectorFromString 可以在运行时确定调用哪个方法

    NSString* selectorStr = [NSString stringWithFormat:@"test%d",i];

    // NSSelectorFromString 可以把字符串转成SEL方法

    // NSSelectorFromString 是一个系统方法,可以把nsstring转成SEL类型

    SEL sel2 = NSSelectorFromString(selectorStr);

    三.isKindofClass

     【注】

    1.用SEL声明的变量来装成员方法

    2.用Class声明的变量来装类型

    //把test这个方法装入sel这个变量

    SEL sel = @selector(test);

            

    //把 book这个类型装入las这个变量中

    //Class这个是用来装类的类型的一个类型

    Class las  = [book class];

     NSArray* array = @[@"one", @"tow", mybook, @"jack"];

    //[问]如何从array取出book这个类型的变量

    for(id object in array)

    {

    //isKindOfClass 用来判断object 这个对象是否是book 类型的

    //isKindOfClass 用于判断对象属于哪个类

    if ([object  isKindOfClass: las]) {

    NSLog(@"%@", object);

    }

    }

    【动态创建类】

    【注】用NSClassFromString可以实现动态创建,取出的这个类必须是当前工程中的类

    //把一个NSString类型装入Class所定义的变量

    // 告诉编译器在当前工程中去找名字是book.h book.m的类然后转换成一个类型。转换成一个book类型

    //  Class mybook = NSClassFromString(@"book");

    //   book * myFirstBook = [[mybook alloc]init];

            

            NSMutableArray* tmpArr = [[NSMutableArray alloc]init];

            NSArray* classNameArray = @[@"surperMan", @"food", @"book"];

            for (  int i = 0; i < 3 ; i++ ) {

                NSString* C_name = classNameArray[i];

                // NSClassFromString 把字符串所对应的类给取出来

                // 前提条件是:取出的这个类必须是当前工程中的类,如果当前工程中不存在这个类

                // 则返回nil

                // 用NSClassFromString可以实现动态创建

                Class myClass = NSClassFromString(C_name);

                id obj = [[myClass alloc]init];

                [tmpArr addObject:obj];

            }

            

    动态创建类好处非常多

    1.大大简化了代码量

    2.使程序功能更加强大

    3.节约程序的内存

  • 相关阅读:
    第一节 Spring的环境搭建
    002. 配置环境变量
    001. 巧妇难为无米之炊之安装环境
    第七节 认识SpringMVC中的表单标签
    [六字真言]6.吽.SpringMVC中上传大小异常填坑
    [六字真言]4.叭.SpringMVC异常痛苦
    [六字真言]5.咪.功力不足,学习前端JavaScript异常
    [六字真言]3.呢.异常的谎言,你要相信多少次?
    [六字真言]2.嘛.异常定制和通用.md
    vim基本技巧
  • 原文地址:https://www.cnblogs.com/ljcgood66/p/5308635.html
Copyright © 2020-2023  润新知