Objective-C的运行时机制,反射机制

利用Objective-C的反射机制和运行时特性实现类静态方法的动态访问(一) 利用Objective-C的反射机制和运行时特性实现类静态方法的动态访问,解决不能使用NSObject类的反射方法 performSelector 访问静态方法的坑爹问题! 阅读详情

Objective-C的运行时机制,反射机制

1、获取类信息

NSArray等集合对象中不限制所存储的对象类型,只要它是一个NSObject就行,如果想知道我们刚刚放进去的对象是什么类型,可发送class消息:

id class = [[arrayobjectAtIndex:0]class];

2、选择器

选择器@selector,用于查询对象的某个方法。

3、类的动态创建

要在代码中创建类,而不是通过静态的.h和.m文件定义类,可以使用Object C运行时库API(#import<objc/runtime.h>)

Class newClz =objc_allocateClassPair([NSError class],”RuntimeErrorSubclass”,0);

class_addMethod(newClz,@selector(retort), (IMP)ReportFunction, “v@:”);

shiyongobjc_allocateClassPair动态函数创建一个类,并在参数中指明该类的父类和类名。用class_addMethod函数为该类增加了一个方法report,这个方法是由函数ReportFunction实现的,由于该函数至少应包含两个参数self和_cmd,因此该方法有3个参数,类型分别为v、@、:(一个返回值,self,_cmd)。

v代表void,指定了方法的返回值;@代表了id类型(对象),制定了方法的固定参数self;:表示了选择器类型(SEL),指定了固定参数_cmd。因此ReportFunction应当实现为:

voidReportFunction(id self, SEL _cmd)

{

       //实现代码

}

新类被注册为类对(Class Pair)

类对注册后,即可在代码中使用

id obj = [[newClzalloc]init];

[objperformSelector:@selector(report)];

[obj release];

4、类的动态加载

Class clz =NSClassFromString(@”MyClass”);

返回对象为“类对象”Class。通过这种方法,从字符串构建类实例就不再是什么问题了

id obj = [[clzalloc]init];

或者

id obj =[[NSClassFromString(@”MyClass”) alloc]init];

这使得我们可以在运行时而不是编译时加载类,同时,不需要#import”MyClass”.

 

4、方法的动态调用

通过@selector关键字可以在一定程度上实现方法的动态调用。更动态的方式是通过Fundation框架的NSSelectorFromString函数,可以直接从字符串获取一个选择器:

SEL sel =NSSelectorFormString(@”doSonethingMethod:”);

if([objectresponsToSelector:sel]){

       [object performSelector:sel withObject:color];

}

UC2844反激电源EMI设计:从噪声源到量产一致性全解析 开关电源的EMI设计是工程实践中的核心挑战,其本质是理解噪声源、传播路径与滤波网络的阻抗匹配关系。反激拓扑因硬开关、漏感储能和RCD钳位振铃,EMI问题尤为突出。通过优化变压器绕制工艺、PCB布局和滤波器参数,可显著抑制传导与辐射噪声。UC2844作为经典电流模式PWM控制器,其固定频率特性和前沿消隐功能为EMI设计提供了可控抓手。本文围绕UC2844反激电源,系统拆解EMI模块架构、关键元件计算、实操调试步骤及量产一致性控制,帮助工程师从噪声源定位到整改落地,实现低成本、高可靠性的EMI设计。 阅读详情

相关推荐

Megatron-LM深度解析:万亿参数大模型的3D并行训练之道

训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。

数据与算法架构提升之路专栏 2090

NSClassFromString那点事

相信码农们都听说过反射这个词,今天要说的iOS下的反射使用方法。虽然在Object-C和Swift中都使用NSClassFromString这个方法,但是在使用过程中还是有细微的差别。具体看下面的代码注释吧 Object-C中使用 Class urlClass = NSClassFromString(controllerValue); //controllerValue为待反射的类名

1618

打穿内网之Vulntarget-a靶场实战记录

内容包括:通达OA未授权上传+文件包含RCE、Redis未授权写马、ms17-010永恒之蓝、代理转发内网跳板、CVE-2020-1472 域控杀器Zerologon、wmiexec/smbexec横向移动、cobalt strike与msf的shell传递

tpaer的博客 3033

Objective-C反射机制

Objective-C反射机制

yangmeng13930719363的专栏 3449

UFS Write Booster技术解析:原理、配置与故障排查实战

在存储技术领域,缓存机制是提升I/O性能的核心手段之一,其原理是通过高速存储介质暂存数据,减少对低速主存储的直接访问,从而降低延迟、提升吞吐。Write Booster正是这一原理在UFS(通用闪存存储)规范中的具体实现,它通过引入独立的易失性高速缓存区(Write Booster Buffer),将主机写入命令快速响应与后台数据持久化分离,技术价值在于显著改善随机写入性能,消除由垃圾回收等后台操作引发的写入卡顿。该技术广泛应用于智能手机应用安装、相机连拍、固件升级(OTA)等对写入流畅性要求高的场景。本文

weixin_42561143的博客 356

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4796

Object-C之反射

[1] 获取class 主要三种方式 // 字符串获取class Class clazz = NSClassFromString(@"FKPerson"); // 根据类获取class clazz = [FKPerson class]; // 根据对象获取class FKPerson *person = [[FKPerson alloc] i

小卓子 1002

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 588

Swift与Objective-C运行机制区别

Objective-C中始终先执行完init方法,再调用viewDidLoad方法。 Swift中,convenience init 并没有被认定为是真正的初始化方法,只是一个包含了初始化方法的特殊的普通方法。 情景举例: 初始化一个类,先处理数据,再设置其它控件,通常我们在OC里可以这样写:-(instancetype)initWith:(NSArray*)data{ if(self

a1484的专栏 1205

2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2024年,华为目前已经启用D卷,目前D卷和C卷的题目一样一次订阅永久阅读,支持在线刷题,持续更新,有问题随时解答,本专栏题目数量已收录到484道。每篇文章的思路分析都非常详细,题目新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析。

KJ.JK 11万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Objective-C 运行时机制详解(区别于C Langauge、C++ Langauge)

Objective-C是动态语言, 一直以来都被Runtime这个东西所迷惑,而恰恰这是一个非常重要的概念。从根本来说,如果要实现一个计算机语言,应该如何考虑呢?这就需要从编译的层次思考前面的问题了。 C、C++、Objective-C实现可以分成3种不同的层次: 第一种是传统的面向过程的语言开发,例如C语言。实现C语言编译器很简单,只要按照语法规则实现一个LALR语法分析器就可以了,编译

aquathinker的专栏 -- AquaMarine Animation 837

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS 开发--Objective-C 反射机制

了解反射机制 Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法和协议,我们可以直接调用从这个类继承过来方法。当然,本篇文章中讲到的反射方法,就在NSObject和Foundation框架中。 反射机制涉及到的东西比较多,这篇文章只从OC层面来讲反射机制,不涉及runtime部分,以后会写文章来专门讲runtime的。 获取Cla

u011752619的博客 853

Camera2Demo

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OC反射机制

NSObject常用方法: ============================================================= OC反射机制:

gcs的博客 304

利用Objective-C的反射机制和运行时特性实现类静态方法的动态访问(二)

继上次的研究成果继续深入研究,洒家又完善了下在运行时动态调用所有OC类方法的公用方法: typedef void*(*ObjcMsgSend)(id, SEL, ...); - (void *)invoke:(id)inst method:(NSString *)name,... {     SEL sel = NSSelectorFromString(name);     IMP

liyun_1981的专栏 1927

iOS之OC面试题

1、Objective-C反射机制 Objective-C反射机制:是类似于Java的反射机制,这种动态机制可以让oc语言更加的灵活。 oc反射机制有三个用途: 1、获得Class 2、检查继承关系 3、动态的调用方法 获取Class对象 Class对象其实本质上就是一个结构体,这个结构体中的成员变量还是自己, 这种设计方式非常像链表的数据结构。 typedef struct objc_class *Class; struct objc_class { Class ..

u010029439的博客 1040

【深入学习iOS开发(一)】Objective-C Reflection(Objective-C 反射机制)

Objective-C Reflection(Objective-C 反射机制) NSObject 方法 除了个别例外,Cocoa 中大部分类都是 NSObject 的子类,因此大部分对象都继承了它所定义的方法。 NSObject 提供了一些简单的查询运行时系统信息的方法: - (BOOL)isKindOfClass:(Class)aClass Returns a Boolea...

weixin_34186950的博客 201

Objective-C的重要知识点

Objective-C 方法和选择器有何不同?(Difference between method and selector?) selector是一个方法的名字,method是一个组合体,包含了名字和实现. Core Foundation的内存管理 凡是带有Create、Copy、Retain等字眼的函数,创建出来的对象,都需要在最后做一次release比如CFRunLoopOb

操作猛如虎的博客 2704

反射机制

Class对象其实本质上就是一个结构体,这个结构体中的成员变量还是自己,这种设计方式非常像链表的数据结构。

CatStarXcode的博客 338

Objective-C语言的元编程

Objective-C的元编程也可以用于构建自定义脚本语言或DSL(领域特定语言)。通过利用动态方法调用和反射机制,开发者可以为某些复杂的逻辑提供更为简洁的语法。例如,可以通过解析特定格式的字符串来生成相应的方法调用。Objective-C的元编程特性为开发者提供了强大的工具,使得代码的灵活性和可扩展性大大增强。通过运用运行时特性、动态方法调用、反射机制以及其他高级特性,开发者能够创建出更为高效和易维护的软件。

2501_91226742的博客 380

iOS运行时编程(Runtime Programming)和Java的反射机制对比

运行时进行编程,类似Java的反射。运行时编程和Java反射的对比如下:   1.相同点   都可以实现的功能:获取类信息、属性设置获取、类的动态加载(NSClassFromString(@“className”))、方法的动态调用    下面是iOS中涉及到的相关使用方法     类的动态加载:NSClassFromString(@“className”),方法的动态调用:NSSe...

weixin_33755554的博客 221

Reflection反射在iOS下使用Objective-C 具体如何使用

反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 以下本博主在空闲之余,使用Objective-C写了一个demo https://

VictorZhang 2052

Runtime应用--反射机制

本文介绍了Runtime的反射机制的应用,以及与Codable的区别

2301_79929304的博客 945

李洪强经典面试题49-Objective-C

李洪强经典面试题49-Objective-C 面试笔试都是必考语法知识的。请认真复习和深入研究OC。 Objective-C 方法和选择器有何不同?(Difference between method and selector?) selector是一个方法的名字,method是一个组合体,包含了名字和实现. Core Foundation的内存管理 凡是带有...

aaa1231722的博客 278
上一篇: iOS (页面间传值)协议和代理的使用 protocol delegate
下一篇: APP 上架证书制作需要注意的几点
明理明智
博客等级 码龄15年 7粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值