Objective-C中的SEL、IMP和Class类型(转)

一、5.8GHz射频接收机链路仿真 5.8GHz射频接收机链路仿真 一、5.8GHz射频接收机链路仿真 文章目录5.8GHz射频接收机链路仿真目的一、原理1、仿真工具2、二次下变频超外超接收机二、要求三、内容总结 目的   1、熟悉射频接收机整体结构。   2、学习使用MATLAB工具进行行为级仿真。   3、进行简单的通信链路预算。   4、直观感受接收机各个模块对整体性能的影响。   5、分析增益、线性度、噪声系数等参数。 一、原理 1、仿真工具   MATLAB是一款功能强大的数学软件,针对不同领域提供各种工具箱,帮助设计者快 阅读详情

这个真的很实用,也很好用。

1、SEL类型

  例子: 

 SEL say;
       SEL skin;

  Objective-C 在编译的时候, 会根据方法的名字(包括参数序列),生成一个用 来区分这个方法的唯一的一个 ID,这个 ID 就是 SEL 类型的。我们需要注意的是,只要方法的名字(包括参数序列)相同,那么它们的 ID 都是相同的。就是 说,不管是超类还是子类,不管是有没有超类和子类的关系,只要名字相同 那么 ID 就是一样的。

  在 程序执行的时候,我们可以方便的通过方法的名字,获取到方法的 ID 也就是我们所说的 SEL, 反之亦然。具体的使用方法如下:

1    SEL 变量名 = @selector(方法名字);
       2    SEL 变量名 = NSSelectorFromString(方法名字的字符串);
       3    NSString *变量名 = NSStringFromSelector(SEL 参数);
其中第 1 行是直接在程序里面写上方法的名字,第 2 行是写上方法名字的字符串,第 3 行是通 过 SEL 变量获得方法的名字。我们得到了 SEL 变量之后,可以通过下面的调用来给一个对象发 送消息:

 [对象 performSelector:SEL 变量 withObject:参数 1 withObject:参数 2];
这样的机制大大的增加了我们的程序的灵活性,我们可以通过给一个方法传递 SEL 参数,让这 个方法动态的执行某一个方法;我们也可以通过配置文件指定需要执行的方法,程序读取配置文 件之后把方法的字符串翻译成为 SEL 变量然后给相应的对象发送这个消息。
从效率的角度上来说,执行的时候不是通过方法名字而是方法 ID 也就是一个整数来查找方法, 由于整数的查找和匹配比字符串要快得多,所以这样可以在某种程度上提高执行的效率。

2、IMP类型

  例子:

      void(*setSkinColor_Func) (id, SEL, NSString*);//定义一个函数指针(传统C语言的处理方式)

      IMP say_Func;//定义一个IMP方式的函数指针(obj-C中推荐的方式)

       说白了IMP就是实现方法,给一个方法起个名字,实现动态调用,不用再使用[对象 message]的方式。

  IMP 的定义如下:

  typedef id    (*IMP)(id, SEL, ... );
这个格式正好和我们在第一行代码里面的函数指针的定义是一样的。
我们取得了函数指针之后,也就意味着我们取得了执行的时候的这段方法的代码的入口,这样我 们就可以像普通的 C 语言函数调用一样使用这个函数指针。当然我们可以把函数指针作为参数 传递到其他的方法,或者实例变量里面,从而获得极大的动态性。我们获得了动态性,但是付出 的代价就是编译器不知道我们要执行哪一个方法所以在编译的时候不会替我们找出错误,我们只 有执行的时候才知道,我们写的函数指针是否是正确的。所以,在使用函数指针的时候要非常准 确地把握能够出现的所有可能,并且做出预防。尤其是当你在写一个供他人调用的接口 API 的 时候,这一点非常重要。
3、Class

  类在 Objective-C 也为我们准备了类似的机制, Class 类型。当一个类被正确的编译过后,在这个编译成功的类里面,存在一个变量用于保存这 个类的信息。我们可以通过一个普通的字符串取得 这个 Class,也可以通过我们生成的对象取 得这个 Class。Class 被成功取得之后,我们可以把这个 Class 当作一个已经定义好的类来使用 它。这样的机制允许我们在程序执行的过程当中,可以 Class 来得到对象的类,也可以在程序 执行的阶段动态的生成一个在编译阶段无法确定的一个对象。
因为 Class 里面保存了一个类的所有信息,当然,我们也可以取得一个类的超类。关于 Class 类型,具体的使用格式如下:
1    Class 变量名 = [类或者对象 class];
2    Class 变量名 = [类或者对象 superclass];
3    Class 变量名 = NSClassFromString(方法名字的字符串);
4    NSString *变量名 = NSStringFromClass(Class 参数);
第一行代码,是通过向一个类或者对象发送 class 消息来获得这个类或者对象的 Class 变量。 第二行代码,是通过向一个类或者对象发送 superclass 消息来获得这个类或者对象的超类的
Class 变量。
第三行代码,是通过调用 NSClassFromString 函数,并且把一个字符串作为参数来取得 Class 变量。这个在我们使用配置文件决定执行的时候的类的时候,NSClassFromString 给我们带来 了极大的方便。
第四行代码,是 NSClassFromString 的反向函数 NSStringFromClass,通过一个 Class 类 型作为变量取得一个类的名字。
当我们在程序里面通过使用上面的第一,二或者第三行代码成功的取得一个 Class 类型的变量, 比如说我们把这个变量名字命名为 myClass,那么我们在以后的代码种可以把 myClass 当作 一个我们已经定义好的类来使用,当然我们可以把这个变量作为参数传递到其他的方法当中让其 他的方法动态的生成我们需要的对象。

本文转自:http://hi.baidu.com/men4661273/blog/item/17169561d09e10c08db10d1b.html


Android USB串口通信详解与实例 在Android开发中,USB串口通信是一个常见的需求,尤其是在与硬件设备进行交互时。通过USB串口,我们可以轻松地实现数据的发送与接收。本文将详细介绍如何使用库来实现Android设备与USB串口设备的通信。 阅读详情

相关推荐

嵌入式开发中Tab与空格混用的危害与统一规范实践

在软件工程中,代码格式一致性是保障可读性与团队协作效率的基础。从原理上看,制表符(Tab)与空格(Space)在存储与显示机制上存在本质差异:Tab是控制字符,其显示宽度取决于编辑器设置;空格则是固定宽度的字符。这种差异导致混用时会引发代码对齐错乱、版本控制冲突及跨平台兼容性问题,严重影响工程的可维护性。尤其在嵌入式开发领域,资源受限环境与高可靠性要求使得统一的编码规范更为关键。通过配置编辑器、集成clang-format等自动化工具,可以强制实现缩进风格的一致性,从而提升代码质量与团队协作效率。本文聚焦于

weixin_42545636的博客 276

Objective-C中的SEL、IMP和Class类型

Objective-C中的SEL、IMP和Class类型

lusonglin121的专栏 1230

Android 11系统定制:如何彻底隐藏状态栏电池图标(RK3568实测)

本文详细解析了在Android 11系统上如何通过多维度修改实现状态栏电池图标的彻底隐藏,特别针对RK3568平台提供了实战指南。从系统UI架构解析到核心配置文件修改,再到进阶技巧与疑难排查,帮助开发者深度定制Android系统,满足特定场景需求。

weixin_29250573的博客 376

SEL类型

SEL类型知识点: 【理解】什么是SEL类型 【掌握】SEL使用 【理解】OC方法查找顺序 1.什么是SEL类型 SEL类型代表着方法的签名,在类对象的方法列表中存储着该签名与方法代码的对应关系 每个类的方法列表都存储在类对象中 每个方法都有一个与之对应的SEl类型的对象、 根据一个SEL对象就可以找到方法的地址,进而调用方法 SEl类型的定义typedef struct objc_selector

Mr_洛先森 693

Oracle Patch清理

- opatch clean的帮助,该命令清除.patch_storage directory文件夹下的'restore.sh,make.txt' files and 'scratch,backup'-- 执行完毕后,貌似没有变化,可能和自己环境有关(19年开始测试补丁,基本上每个季度都测试,后面把又把数据库用RMAN做了迁移,又转换成了PDB模式)。在对Oracle安装补丁后,会发现OS上被占用了大量的空间,本文档清理Opatch过程中的一些文件,释放空间。--清理后空间,剩余25G。

文档搬运工 1072

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2044

Objective-C IMP使用

Objective-C 运行时寻找匹配消息的IMP(implementation) 运行时方法的结构(用户不可见): struct objc_method { SEL method_name; char * method_types; IMP method_imp; }; typedef objc_method Method; 参数说明: method_name

hetao220284的专栏 871

从菜鸟到大神:VSCode助力HTML开发全攻略

本文全面介绍 VSCode 在 HTML 开发中的高效应用。先引导读者完成 VSCode 的安装与个性化设置,助其快速适应开发环境;接着推荐 Live Server、Prettier 等实用插件,实现实时预览、代码格式化等功能,提升开发效率。通过详细的开发实战步骤,从新建文件到添加样式,带领读者掌握 HTML 基础结构与常用标签使用。还分享代码片段管理、多人协作等进阶技巧,解决常见开发问题。旨在帮助开发者利用 VSCode,轻松高效完成 HTML 开发,打造优质网页。

邓邓子的博客 3365

iOS_selector、SEL、IMP、Method都是什么,以及之间的关系

在`Objective-C`中使用发送消息的形式来调用方法,其中涉及到`Runtime`库中定义的`SEL`、`IMP`、`Method`,它们分别表示什么,以及它们之间的关系。

mikimo的博客 2974

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3816

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

Objective - C基础: 第四天 - 10.SEL类型的基本认识

在这之前, 我们回想一下, 我们知道实现我们所需要的功能, 就要调用某些方法, 那么这些方法又是怎么样调用的呢? 原理是怎么样的? 让我们一起来探讨一下看看~~ 例子: #import <Foundation/Foundation.h> @interface Person : NSObject - (void)test; @end @implementa...

weixin_30773135的博客 136

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS Runtime详解之SEL,Class,id,IMP,_cmd,isa,method,Ivar

原创Blog,转载请注明出处 http://blog.youkuaiyun.com/hello_hwc?viewmode=list 我的stackoverflow前言:写了这么久的iOS博客,也是时候写写Rumtime的东西了,实际开发中用到的比较多的场景 动态改变方法的执行体 Method Swizzling NSSelectorFromString,NSClassFromString… 动态添加属性

Leo的专栏 8143

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Objective-C-- id、nil、Nil、SEL、IMP、Method、Class

在Objective-C中,有一些我们之前并不熟悉但是经常见到的数据类型,比如id、nil、Nil、SEL等等。在很多文章里,我们都见过这些数据类型的介绍,但是都没有说的太清楚。 这篇文章从最底层的定义开始,介绍一下这些类型到底是怎么定义的,这会帮助我们更加深入地了解Objective-C。 参考: http://unixjunkie.blogspot.com/2006/02

妙心的专栏 1792

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

理解 id, Class, isa, SEL, IMP, Method

理解 id, Class, isa, SEL, IMP, Method id 类型 首先介绍两个概念:静态类型和动态类型。 静态类型:将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,比如:(下面的p指针就是静态类型) NSString *p = [[NSString alloc] init]; 动态类型:程序运行时才确定变量的类,比如:(下面的p指针在编译的时候不知道自己的类型,直到运行时才直到) id p = [[NSString alloc] init];

BoilerUp的博客 453

关于CLASS , SEL, IMP的说明

cocoa当中的函数调用,是一种以消息的方式进行的函数调用,这一点与C++,java是有很大差别的。因此该类型的理解,会涉及到三个重要的概念,class,sel,IMP。

lst865671075的专栏 284

如何将字符串变量起名为class_理解 id, Class, isa, SEL, IMP, Method

理解 id, Class, isa, SEL, IMP, Methodid 类型首先介绍两个概念:静态类型和动态类型。静态类型:将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,比如:(下面的p指针就是静态类型)NSString *p = [[NSString alloc] init];动态类型:程序运行时才确定变量的类,比如:(下面的p指针在编译的时候...

weixin_42236063的博客 333

objective C中的@class, SEL , IMP等灵活机制(五)

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的优快云专栏,原文地址:http://blog.youkuaiyun.com/holydancer/article/details/7347399 在objective c中,如果细心的话会发现,每个类中都会自动生成一个class 类型的isa, @interface NSObject { Clas

holydancer的专栏 2万+

method by id是什么_理解 id, Class, isa, SEL, IMP, Method

理解 id, Class, isa, SEL, IMP, Methodid 类型首先介绍两个概念:静态类型和动态类型。静态类型:将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,比如:(下面的p指针就是静态类型)NSString *p = [[NSString alloc] init];动态类型:程序运行时才确定变量的类,比如:(下面的p指针在编译的时候...

weixin_39955925的博客 162

Objective-C中的一些特殊的数据类型 SEL、id、@、nil、Nil

下面是从objc.h中摘录的一段,定义了一些数据类型:// objc.h typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id;typedef struct objc_selector *SEL; typedef id (*IMP)(id, SEL, …); type

qq_21213939的博客 964

ObjC(Objective-C)中的Class(类类型),Selector(选择器SEL),函数指针(IMP)

ObjC(Objective-C)中的Class(类类型),Selector(选择器SEL),函数指针(IMP) https://www.cnblogs.com/TsengYuen/archive/2011/04/20/2022107.html ObjC(Objective-C)中的Class(类类型),Selector(选择器SEL),函数指针(IMP) 今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器S.

kuangben2000的博客 334

Objective-C之Class类型、选择器Selector以及函数指针(ZZ)

我们在实际上的编程过程中,也许会遇到这样的场景,那就是我们在写程序的时候不能确切的知道我们需要使用什么类,使用这个类的什么方法。在这个时候,我们需要在我们的程序里面动态的根据用户的输入来创建我们在写程序不知道的类的对象,并且调用这个对象的实例方法。Objective-C 为我们提供了Class 类型, 选择器Selector 以及指针函数来实现这样的需求,从而大大的提高了我们程序的动态性能。

Logol_Van的专栏 1065
上一篇: 如何在C语言编程中调用linux系统终端下的命令
下一篇: cocos2d的常用动作及效果总结之一: Basic actions(转)
woodcol
博客等级 码龄19年 288粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值