【认识选择器】============================================

SEL

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

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

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

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

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

SEL sel = @selector(printName);

//执行选择器

[manInBlack performSelector:sel];

//

//[manInBlack printName:@"我是超人,我会飞"];

//多了一个冒号

SEL sel1 = @selector(printName:);

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

[manInBlack performSelector:sel1 withObject:@"我是超人,我会飞"];

//

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

//创建一个带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.节约程序的内存

OC-SEL 和 Class的更多相关文章

  1. OC SEL (@selector) 原理及使用总结(转)

    SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...

  2. OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  3. 李洪强iOS开发之OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  4. OC中的SEL解析

    OC中的SEL对象即selector对象,用来保存一个方法的地址.下面通过一个Demo来解析SEL的原理.创建一个Person类,Person.h中: #import <Foundation/F ...

  5. QF——OC中的SEL类型和Block

    @selector(): 可以理解@selector()就是取类方法的编号,他的基本行为类似于C语言中的函数指针(指向函数的指针).它们通过传递方法的地址(或编号)来实现把方法当做参数的效果. 不过在 ...

  6. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  7. OC中SEL,类别,继承,协议的使用

    1.SEL SEL是selector的缩写,selector在OC中作用是定义一个方法变量,通过该方法变量来调用方法.我们在后面的UI中会经常用selector来调用事件方法.下面我将举两个例子来说明 ...

  8. oc语言--description方法和sel

    一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时, ...

  9. 「OC」类的深入研究、description方法和sel

    一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...

  10. OC description和sel

    一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时, ...

随机推荐

  1. 爬虫任务一:使用httpclient去爬取百度新闻首页的新闻标题和url,编码是utf-8

    第一个入手的爬虫小任务: maven工程 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  2. 简明python教程四-----模块

    模块基本是一个包含了所有你定义的函数和变量的文件.为了在其他程序中重用模块,模块的文件名必须以.py为扩展名. #!/usr/bin/python #Filename:using_sys.py imp ...

  3. S5第一次月考

    # Python五期月考一 # 1 介绍 # 满分100分,90分及格 # # 考试范围: # 1.Python语法 # 2.数据类型 # 3.流程控制 # 4.函数 # 5.模块 # # 考试时间: ...

  4. IE调试页面总结

    随着IE版本的升级,IE变的越来越强大,随之带来的问题也是越来越明显,如:如何调试在低版本的浏览器中 的情况 IE9的方法: 出于未知需求,用户在安装了较高版本IE浏览器(IE9)之后,又需要使用低版 ...

  5. 125. Valid Palindrome(判断忽略标点的字符串是否回文,加个正则,与上一题解法一样)

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  6. PAT 天梯赛 L1-021. 重要的话说三遍 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-021 AC代码 #include <iostream> #include <cstdio&g ...

  7. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...

  8. Apache 源码包安装

    系统:Centos 7.4 服务:Apache 2.4.33.apr 1.5.2.apr-util 1.5.4 依赖包: pcre.x86_64 pcre-devel.x86_64 openssl.x ...

  9. FTP pure-ftpd 安装、管理

    FTP简介 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为文传协议,用户Internet上的控制文件的双向传输. FTP的主要作用,就是让用户链接上一个远 ...

  10. 手动漏洞挖掘-SQL注入(安全牛笔记)

    substring_index(USER(),"@",l)-- #是将查询出来的结果进行切分,以@符号的方式切分 ’ union select table_name,table_s ...