iOS OC动态运行时(runtime)~动态特性表现

iOS runtime探究(二): 从runtime开始深入理解OC消息转发机制 你要知道的runtime都在这里转载请注明出处 http://www.jianshu.com/p/eac6ed137e06本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性proper 阅读详情

一、概念:

因为运行时 runtime 是 必须到运行时(run time)才会做一些事情;

所以OC的动态特性表现为了三个方面:动态类型、动态绑定、动态加载;

动态:主要是将数据类型的确定由编译时,推迟到了运行时。之所以叫做动态,

二、iOS OC动态运行时~动态类型

1.动态类型,就是id类型。

2.动态类型是跟静态类型相对的。像内置的明确的基本类型都属于静态类型(int、NSString等)。

3.静态类型 在编译的时候就能被识别出来。所以,若程序发生了类型不对应,编译器就会发出警告。

4.动态类型 就编译器编译的时候是不能被识别的,要等到运行时(run time),即程序运行的时候才会根据语境来识别。

idobj = someInstance;

if([obj isKindOfClass:someClass]) {

someClass *classSpecifiedInstance = (someClass *)obj;

}

注意: 静态类型就在编译时;动态类型是在运行时;

三、iOS OC动态运行时~动态绑定

在OC中,没有函数的概念,我们叫“消息机 制”,函数调用就是给对象发送一条消息。这时,动态绑定的特性就来了。OC可以先跳过编译,到运行的时候才动态地添加函数调用,在运行时才决定要调 用什么方法,需要传什么参数进去。这就是动态绑定,

1.动态绑定只需记住关键词@selector/SEL即可。静态的,不能改变。要实现他就必须用SEL变量绑定一个方法。最终形成的这个SEL变量就代表一个方法的引用。

2.这里要注意 一点:SEL并不是C里面的函数指针,虽然很像,但真心不是函数指针。SEL变量只是一个整数,他是该方法的ID,@selector()就是取类方法的编号。

3.以前的函数调用,是根据函数名,也就是 字符串去查找函数体。但现在,我们是根据一个ID整数来查找方法,整数的查找字自然要比字符串的查找快得多!所以,动态绑定的特定不仅方便,而且效率更 高。

4.由于OC的动态特性,在OC中其实很少提及“函数”的概念,传统的函数一般在编译时就已经把参数信息和函数实现打包到编译后的源码中了,而在OC中最常使 用的是消息机制。调用一个实例的方法,所做的是向该实例的指针发送消息,实例在收到消息后,从自身的实现中寻找响应这条消息的方法

5.补充:对于其他一些静态语言,比如 c++,一般在编译的时候就已经将将要调用的函数的函数签名都告诉编译器了。

四、iOS OC动态运行时~动态加载

作为一个ios开发者,遇到问题的时候,有一个学习的氛围跟一个交流圈子特别重要对自身有很大帮助,众人拾柴火焰高 这是一个我的iOS交流群:711315161,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。

根据需求加载所需要的资源,这点很容易理解,对于iOS开发来说,基本就是根据不同的机型做适配。最经典的例子就是在Retina设备上加载@2x的图片,而在老一些的普通屏设备上加载原图。

开发使用场景:如果一个类方法非常多,加载类到内存的时候也比较耗费资源,需要给每个方法生成映射表,可以使用动态给某个类,添加方法解决。

谢谢!!!

作者:石虎132 链接:https://www.jianshu.com/p/42bbff8d574b

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法 全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法 阅读详情

相关推荐

项目过程记录:ADS-B信号接收并显示(Ubuntu20.04+ANTSDR E310V2)

最近被安排做一个ADS-B信号接收的项目,拿到软件无线电模块(ANTSDR E310V2)后安装环境和软件真的太折磨了。。在此记录以下我走过的弯路,大家可以参考一下。

weixin_43627638的博客 5017

oc 运行时

1. runtime详细描述一、runtime简介 The Objective-C language defers as many decisions as it can from compile time and link time to runtime. Whenever possible, it does things dynamically. This means that the la

HOSTEN的博客 456

保姆级教程:用BIGEMAP和Global Mapper搞定5米精度DEM高程数据下载与处理

本文提供了一份详细的5米精度DEM高程数据处理教程,涵盖从BIGEMAP下载到Global Mapper处理的完整流程。通过实战案例和避坑指南,帮助用户掌握高效下载DEM数据、优化等高线生成及坐标系转换的关键技巧,适用于GIS新手和专业人士。

weixin_34169322的博客 390

OC运行时--理论篇

1.什么是运行时? 1>概念 运行时是一套纯C语言的API 2>编译查看 实际上编译器最终都会将OC代码转为运行时代码(也可手动编译,终端执行:clang -rewrite-objc xxx.m) 3>具体应用:运用运行时函数,实现一些底层的操作,比如 * 将某些OC代码转为运行时代码:比如查看block的实现原理 * 拦截系统自带的方法...

weixin_30480651的博客 147

AAAI2024最佳解读|FontDiffuser One-Shot Font Generation via Denoising Diffusion with Multi-Scal

本文提出了一种名为FontDiffuser的基于扩散的单次字体生成方法,旨在通过去噪扩散模型生成模仿参考图像风格的字体,同时保留源图像的内容。尽管现有的字体生成方法在性能上取得了一定的进展,但在处理复杂字符和大风格变化时仍面临挑战。FontDiffuser通过引入多尺度内容聚合(MCA)模块,有效结合不同尺度的全局和局部内容线索,从而增强复杂字符的笔画保留能力。此外,文章还提出了一种风格对比细化(SCR)模块,用于风格表示学习,利用风格提取器从图像中分离风格,并通过精心设计的风格对比损失来监督扩散模型。

haimianxiaobao11的博客 1193

MPU6050运动中断唤醒STM32低功耗休眠模式实战

本文详细介绍了如何使用MPU6050运动中断唤醒STM32低功耗休眠模式的实战方案。通过配置MPU6050的运动检测中断作为STM32的唤醒源,实现设备在静止时进入低功耗Stop模式,运动时快速唤醒,大幅延长电池续航。涵盖硬件连接、软件配置、参数调试等关键步骤,并提供实际应用案例和优化建议。

rgv23456789的博客 703

iOS底层原理系列03-Objective-C运行时机制

存在形式:分类由category_t结构体表示,而扩展没有单独的结构体。加载时机:分类在运行时动态加载,扩展在编译期就与原类合并。实例变量:分类不能添加实例变量,扩展可以添加实例变量。方法覆盖:分类可以覆盖原类方法,多个分类之间按编译顺序覆盖;扩展的方法和原类方法等价,不存在覆盖关系。源码要求:分类可以为任何类添加功能,扩展只能为有源码的类添加功能。

但行好事,莫问前程;不忘初心,方得始终! 1585

1、掌握 Microsoft Dynamics 365 Business Central 开发全解析

本文全面解析了Microsoft Dynamics 365 Business Central的开发全流程,涵盖开发环境搭建、AL语言扩展开发、定制解决方案实现、高级开发技术、文件与报表处理、打印功能、调试与性能优化、API使用、Azure和Power Platform集成、DevOps实践以及生成式AI应用。同时探讨了开发工具技巧、常见问题解决、开发流程优化、团队协作要点及未来技术趋势,帮助开发者系统掌握Business Central开发核心技能,提升企业级应用开发效率与质量。

food6的博客 111

OC runtime 运行时详解

一、简介 1.1 什么是Runtime Runtime是一套底层纯C语言API,我们编写的OC代码最终都会被编译器转化为运行时代码,通过消息机制决定函数调用方式,这也是OC作为动态语言使用的基础。 1.2 消息机制的基本原理 在Object-C的语言中,对象方法调用都是类似[receiver selector] 的形式,其本质:就是让对象在运行时发送消息的过程。 而方法调用[receiver selector]分为两个过程: 编译阶段 [receiver selector] 方法被编译器转化,分为.

Rey的技术博客 1446

SAP_SD模块信用管理-最早未清项判断逾期

在 SAP SD 模块的信用管理(Credit Management) 中,系统可以通过 最早未清项(Oldest Open Item) 来判断客户是否存在逾期,从而影响订单的信用检查结果。例如: 定义最大未清项目%为1%,未清天数为1天,即允许客户“逾期1天的未清应收帐款/该客户的应收帐款余额”最大比例为1%,若超过1%则将被信用冻结。的信用检查功能,用于判断客户是否有账龄过长的未清款项,并据此决定是否允许新的销售订单继续处理。然后在查看客户的信贷信息可以看到,最早的未清信息显示在系统中。

我小时候很黑的博客 863

进阶01:Labview与OPC UA设备通信

LabVIEW通过OPC UA实现高效设备通信方案 本文介绍了使用LabVIEW与OPC UA设备通信的完整实施方案。OPC UA协议具有跨平台兼容、高安全性和高效数据交换等优势。实施步骤包括:1)安装NI OPC UA工具包;2)搭建模拟测试环境,使用OPC UA Simulation Server创建测试变量;3)编写LabVIEW程序,实现连接服务器、事件订阅、数据读写等功能。重点展示了通过用户事件实现设备主动触发的机制,当模拟变量值改变时自动触发LabVIEW事件处理。该方案验证了OPC UA在工业

weixin_38637405的博客 1402

OC运行时机制之Runtime

一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数。对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。事实证明: 在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过

Walden_tinghou的专栏 1998

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

iOS运行时Runtime在OC中的应用场景

iOS运行时Runtime应用场景

humiaor的博客 2469

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ios runtime重要性_Runtime-iOS运行时基础篇

本文主要整理了Runtime的相关知识。对于一个iOS开发者来说,掌握Runtime的重要性早已不言而喻。OC能够作为一门优秀的动态特性语言,在其背后默默工作着的就是Runtime。在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够融入自己的理解,从简单的问题出发,一步一步理解和学以致用。iOS运行时Runtime.png目录:一、怎么理解OC是动态语言,Runtime又是什么?二、理解...

weixin_32780623的博客 228

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Runtime-iOS运行时基础篇

转自:https://www.jianshu.com/p/d4b55dae9a0d   本文主要整理了Runtime的相关知识。对于一个iOS开发者来说,掌握Runtime的重要性早已不言而喻。OC能够作为一门优秀的动态特性语言,在其背后默默工作着的就是Runtime。在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够融入自己的理解,从简单的问题出发,一步一步理解和学以致用。 ...

weixin_30776863的博客 97

Runtime运行时机制

简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如: [receiver message]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector) // 如果其还有参数比如: [receiver message:(id)arg...]; // 底

guojigang8963869的博客 1713

Runtime

iOS中的Runtime机制是OC和Swift的一种动态特性,它允许应用在运行时动态地创建类对象和实例对象,并通过消息传递和转发来实现方法的调用。

qq_74177011的博客 1304

iOS Runtime

1.runtime的基本知识点; 2.使用runtime实现动态; 3.JSPatch的基本学习和认识。 4.动态更新

kaka_2928的博客 554

iOS Runtime的一些总结

iOS Runtime(运行时)是苹果系统提供的一套底层核心机制,它负责在运行时动态管理对象的一套底层核心机制,它负责在应用运行时管理对象的创建、方法调用、属性访问和内存分配,是Objective-C语言的动态特性的核心。以上就是今天对Runtime的一些总结。

qq_37397507的博客 530

iOS Runtime理解和应用场景

第一个参数是需要添加方法的类,第二个参数是一个selector,也就是实例方法的名字,第三个参数是一个IMP类型的变量也就是函数实现,需要传入一个C函数,这个函数至少有两个参数,一个是id self一个是SEL _cmd,第四个参数是函数类型。3)完整的消息转发:当-(void)forwardInvocation:(NSInvocation*)anInvocation 方法方法nil的时候则进入消息转发的最后阶段,完整的消息转发。这里利用runtime修改isa指针,修改调用方法时寻找方法的类。

opentogether的博客 2728

【iOS】探索消息流程

runtime运行时是指在代码跑起来,被装载到内存中的一个过程;在这个时候如果出错的话,程序就会崩溃,这是一个动态阶段编译时是源代码翻译成机器能识别的代码的一个过程,这个时候主要是对语言进行最基本的检查报错,即词法分析、语法分析等,这是一个静态的阶段runtime通过OC代码,例如通过NSObject方法,例如通过Runtime API,例如其中的compiler就是我们了解的编译器,即LLVM,例如OC的alloc对应底层的objc_alloc就是底层库。OC。

2301_79847748的博客 1294

1.OC语言Swift特性,动态运行时,runtime,KVC ,KVO,MVC 设计模式

1.Objective-C语言特性 2.static __block const 3.Object-C的内存管理 4.RunLoop 5.iOS消息传递机制 6.iOS程序生命周期 7.MVC设计模式MVVM 8.UIView CALayer Frame 与bounds 9.根类 NSObject 10.多线程简介 11.数据持久化 12.JSON和XML HTML 自定义报文 13.网络编程 HTTP TCP/IP Socket ASI AFNetwork 14.AppStore上传 及远程推送 15.

愤怒的swift 1327

Runtime-iOS运行时应用篇

在上篇文章iOS运行时Runtime基础后,本篇将会总结Rutime的具体应用实例,结合其动态特性,Runtime在开发中的应用大致分为以下几个方面: Runtime应用.png 相关文章:iOS运行时Runtime基础 一、动态方法交换:Method Swizzling 实现动态方法交换(Method Swizzling )是Runtime中最具盛名的应用场景,其原理是:通过Runtime获取到方法实现的地址,进而动态交换两个方法的功能。使用到关键方法如下: //获取类方法的M..

box_kun的博客 289
上一篇: 如何使用VIPER构建iOS应用
下一篇: flutter中的状态管理Provider
在iOS写bug的杰克
博客等级 码龄6年 6粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值