OC基础-SEL解析14

2023-10-30 06:10
文章标签 基础 解析 14 oc sel

本文主要是介绍OC基础-SEL解析14,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.什么是SEL


    SEL 全称叫做  selector 选择器.

    SEL 1个数据类型. 所以要在内存中申请空间存储数据.

    SEL其实是1个类. SEL对象是用来存储1个方法的.



2. 类的存储方式


    类是以Class对象的形式存储在代码段之中.


    类名:存储的这个类的类名. NSString


    还要将方法存储在类对象之中.如何将方法存储在类对象之中.


    1). 先创建1SEL对象.

    2). 将方法的信息存储在这个SEL对象之中.

    3). 再将这个SEL对象作为类对象的属性.



3. 拿到存储方法的SEL对象.


    1). 因为SEL1typedef类型的 在自定义的时候已经加*.

    所以 我们在声明SEL指针的时候 不需要加*


    2). 取到存储方法的SEL对象,

    SEL s1 = @selector(方法名);



4. 调用方法的本质.


    [stu1 sayHi];

    内部的原理:

    1). 先拿到存储sayHi方法的SEL对象,也就是拿到存储sayHi方法的SEL数据. SEL消息.


    2). 将这个SEL消息发送给stu1对象.


    3). 这个时候,stu1对象接收到这个SEL消息以后 就知道要调用方法


    4). 根据对象的isa指针找到存储类的类对象.


    5). 找到这个类对象以后 在这个类对象中去搜寻是否有和传入的SEL数据相匹配的.

    如果有 就执行  如果没有再找父类 直到NSObject



    OC最重要的1个机制:消息机制.

    调用方法的本质其实就是为对象发送SEL消息.

    [stu1 sayHi]; stu1对象发送1sayHi消息.


5. 重点掌握:


    1).方法是以SEL对象的形式存储起来.

    2).如何拿到存储方法的SEL对象.




6. 手动的为对象发送SEL消息.


    1). 先得到方法的SEL数据.


    2). 将这个SEL消息发送给p1对象.


    调用对象的方法 SEL数据发送给对象.

    - (id)performSelector:(SEL)aSelector;


    Student *stu1 = [Student new];

    SEL s1 = @selector(sayHi);

    [stu1 performSelector:s1]; [p1 sayHi]效果是完全一样的.



   3). 调用1个对象的方法有两种.

      1). [对象名 方法名];


      2). 手动的为对象发送SEL消息.



7. 注意事项:



    1). 如果方法有参数 那么方法名是带了冒号的.


    2). 如果方法有参数,如何传递参数.

    那么就调用另外1个方法.


    - (id)performSelector:(SEL)aSelector withObject:(id)object;

    - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;



    3). 如果有多个参数


    把参数封装到对象里

这篇关于OC基础-SEL解析14的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/306095

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三