E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
msgSend
Runtime之objc_
msgSend
和objc_msgForward
[objfoo]与objc_
msgSend
(obj,@selector(foo))关系[objfoo];在编译时,会被转意为:obc_
msgSend
(obj,@selector(foo));3.objc_
msgSend
向小暖_he
·
2023-08-11 04:11
Runtime的本质3-方法调用的本质
xcrun-sdkiphoneosclang-archarm64-rewrite-objcmain.m[persontest];//c++底层代码((void(*)(id,SEL))(void*)objc_
msgSend
CoderJRHuo
·
2023-08-08 00:13
初探OC底层原理之《消息慢速查找obc_
msgSend
_uncached》
分析lookUpImpOrForward源码流程.macroMethodTableLookupSAVE_REGSMSGSEND//lookUpImpOrForward(obj,sel,cls,LOOKUP_INITIALIZE|LOOKUP_RESOLVER)//receiverandselectoralreadyinx0andx1movx2,x16movx3,#3bl_lookUpImpOrFo
破茧重来
·
2023-08-05 06:47
IOS底层-objc_
msgSend
慢速方法查找
快速查找流程中,如果没有找到方法实现,无论是走到CheckMiss还JumpMiss,最终都会走到__objc_
msgSend
_uncached汇编函数在主流环境arm64环境为条件条件,在objc-msg-arm64
lkm_0bdc
·
2023-08-02 15:34
什么时候会报unrecognized selector异常?
不含有对应方法的时候,并且依旧没有给出消息转发的具体方案的时候,程序运行时会crash并抛出unrecognizedselector异常.objective-c中的每个方法在运行时会被转化为消息发送objc_
msgSend
baby_在海边
·
2023-08-01 11:28
OC底层07:objc_
msgSend
流程分析
通过clang进行编译,可以找到:Test*p=((Test*(*)(id,SEL))(void*)objc_
msgSend
)((id)objc_getClass("Test"),sel_registerName
ZAREMYDREAM
·
2023-07-31 16:57
objc-msg-arm64源码深入分析
发送消息的过程执行在编译阶段会转化成对objc_
msgSend
函数的调用。本文将分析objc_
msgSend
汇编部分主要部分(fastpath)。
806349745123
·
2023-07-30 17:25
iOS +load +initialize方法的一些浅谈
load、initialize方法的区别1.调用方式load是根据函数地址直接调用initialize是通过objc_
msgSend
调用2.调用时刻load是runtime加载类、分类的时候调用(只会调用一次
安然丷
·
2023-07-28 04:45
第十二节—objc_
msgSend
(四)消息转发
本文为L_Ares个人写作,以任何形式转载请表明原文出处。本节开始说明在动态决议依然没有找到sel的imp的话,系统还有没有留给我们机会去防止报错,或者说程序的crash。其实在看到lookUpImpOrForward这个慢速查找流程的除了动态决议还有一个方法done图片.png但是你会发现走到这里的都是都是imp找到了以后的情况。所以我们可以进去看一看。staticvoidlog_and_fil
L_Ares
·
2023-07-26 12:02
为什么要设计metaclass
源代码来自objc-750__objc_msg发送ENTRY_objc_msgSendUNWIND_objc_
msgSend
,NoFramecmpp0,#0//nilcheckandtaggedpointercheck
robin2005
·
2023-07-26 10:06
详解Runtime,在Objective-C开发中的用途
2、所有方法调用都是发消息,例如[selfinit];被转化为objc_
msgSend
(self,@selector(init))在OC中id指针,可以代表所有对象,其实id是结构体,我们
曲和之殇
·
2023-07-25 07:55
ios Runtime理解
OC的消息机制OC中的方法调用其实都是转成了objc_
msgSend
函数的调用,给recei
piggybear
·
2023-07-24 06:58
runtime源码之obj_
msgsend
今天带大家探索一下底层_objc_
msgSend
的实现过程我们找到头文件是这样子解释的:/***Sendsamessagewithasimplereturnvaluetoaninstanceofaclass
_兜兜转转_
·
2023-07-23 23:20
iOS底层之objc_
msgSend
快速查找流程
下面我们来分析objc_
msgSend
消息发送过程中是怎么查找方法缓存的。首先,我们先了解下Runtime的机制。RuntimeRuntime,顾名思义,即运行时,区别于编译时。
K哥的贼船
·
2023-07-23 00:02
发送消息(objc_
msgSend
(id self,SEL _cmd) )方法的底层实现
OC调用方法intmain(intargc,constchar*argv[]){@autoreleasepool{Persion*persion=[[Persionalloc]init];[persionteset];}return0;}进行clang成c++文件//终端命令xcrun-sdkiphoneosclang-archarm64-rewrite-objcmain.m-omain-cpp.
kalpa_shock
·
2023-07-22 07:12
objc_
msgSend
源码阅读
objc_
msgSend
是OC中调用最为频繁的方法,所有OC方法的调用都离不开这个它。
某某香肠
·
2023-07-22 05:52
too many arguments to function call, expected 0, have 2解决方案
用xcode13运行代码报错,定位在objc_
msgSend
(self.refreshTarget,self.refreshSelctor);将上述代码强制转换之后报错消息((void(*)(id,SEL
蚯小麦
·
2023-07-22 05:54
【iOS】消息传递机制和消息转发机制
发送消息后,编译器将其转换为对应的一条C语言消息发送原语voidobjc_
msgSend
(idself,SELcmd,...)第一个参数代表消息的接收者,第二个参数代表消息选择子。
an_Anthony
·
2023-07-20 18:44
objc_
msgSend
底层之快速查找流程
方法调用的实质当我们使用clang编译.m文件,可以看到一个对象调用方法会被编译器转化为((#返回类型#(*)(id,SEL))(void*)objc_
msgSend
)(#方法接收者#,sel_registerName
iOSer_jia
·
2023-07-18 17:17
iOS 底层解析-----RunTime 之 objc_
msgSend
执行流程
上篇文章isa与Class详解OC中的方法调用,其实都是转换为objc_
msgSend
函数的调用objc_
msgSend
的执行流程可以分为3大阶段消息发送(发送消息给类类去调用对应的方法)动态方法解析(
Mr丨Yang
·
2023-07-16 18:07
【OC底层_消息发送与转发机制原理】
什么是消息传递选择子SELIMPIMP和SEL的关系消息发送1.快速查找objc_
msgSend
()的执行流程objc_
msgSend
()深基核心逻辑及其参数解析源码解析消息发送的快速查找总结:objc_
msgSend
神奇阿道和小司
·
2023-07-16 16:04
swift
ios
开发语言
objective-c
macos
消息流程3.动态方法决议和消息转发
动态方法决议objc_
msgSend
发送消息会先从缓存里面imp缓存中查找,如果没有查找到会进入lookUpImpOrForward查找,先从当前类的methods()查找,没有就去父类缓存,不断循环查找
东旭39
·
2023-06-24 09:39
iOS 底层动态方法决议 & 消息转发
前言OC调用方法,底层是调用objc_
msgSend
发送消息。在发送消息时会经过一系列的快速查找、慢速查找,如果查找到对应的IMP,直接返回;如果没有找到,就会进入到方法的动态方法决议和消息转发流程。
Mr木子李
·
2023-06-24 00:39
Objc4-750源码编译
比如我上一篇介绍了消息转发机制提到的调用的方法都会执行objc_
msgSend
()。下面我们来看一下苹果开源的源码的底层实现。
江南易飞
·
2023-06-23 10:04
load、initialize方法的区别是什么?
1.调用方式上的区别1>load是根据函数地址直接调用;2>initialize是通过objc_
msgSend
调用;2.调用时刻1>load是runtime加载类、分类的时候调用(只会调用一次);2>initialize
ZX4580
·
2023-06-15 01:41
iOS-底层原理-消息流程objc_
msgSend
分析之汇编查询cache--->快速查找
本文的主要目的是理解objc_
msgSend
的方法查找流程,首先查找的是cache缓存而且用汇编实现的,因此称之为快速查找,对应的methoList查询,称之为慢速查找。
如意神王
·
2023-06-14 01:00
iOS16之后新加的内容
findConformanceWithDyld方法内部并没有onDisk方法簇的调用dyld关于协议一致性的内存缓存也是在Swift5.4加入的在Objective-C中,几乎所有的方法调用都会转化为消息发送,而消息发送的必经之路就是objc_
msgSend
星光uoin
·
2023-06-13 16:50
swift
objective-c
iOS16
iOS开发:方法查找与消息转发
Objective-C的方法的调用都是一个消息转发的过程,objc_
msgSend
(receiver,selector,...),第一个参数表示消息的接收者,第二个参数表示消息的名称,即方法。
__Null
·
2023-06-11 20:46
iOS_Swift函数派发机制
文章目录1.Swift函数派发类型1.1staticdispatch1.2tabledispatch1.3objc_
msgSend
2.派发类型识别2.1Struct/Enum2.2Class2.3Class-Extension2.4NSObjectSubclass2.5Protocol
Morgana_Mo
·
2023-06-07 03:49
Swift基础
iOS开发
swift
ios
开发语言
OC底层原理08-objc_
msgSend
方法消息慢速查找(二)
iOS--OC底层原理文章汇总本章内容是基于上一章OC底层原理07--Runtime以及objc_
msgSend
分析(一)内容继续扩展,上一章中探究了方法消息快速查找方式,这一章将探索objc_
msgSend
夏天的枫_
·
2023-04-19 09:43
iOS底层探索 ---Runtime(一)--- 基础知识
2、消息机制的基本原理3、Runtime中的概念解析(objc_
msgSend
/Class/Object/MetaClass/Method)4、Runtime消息转发5、消息发送以及转发机制总结1、什
Jax_YD
·
2023-04-19 05:41
iOS看源码:消息转发
消息的发送前篇iOS看源码:消息发送01iOS看源码:方法缓存iOS看源码:方法慢速查找消息发送的本质是objc_
msgsend
(),会先从消息接受者的缓存中查找,缓存中找不到则按照isa的指向依次按照由本类向父类直到根类
FireStroy
·
2023-04-18 23:12
(五) Hook C和Swift函数
1.用dlopen和dlsym进行Hook或执行代码1.1Objective-C运行时和Swift与CObjective-C是动态语言,当objc_
msgSend
调用时在知道要怎么执行。
收纳箱
·
2023-04-18 13:36
objc_
msgSend
分析
Runtime的介绍:Legacy(传统版本)Objective1.0Modern(现行版本)Objective2.0传统版本⽤于Objective-C1.0,32位的MacOSX的平台上。现⾏版本:iPhone程序和MacOSXv10.5及以后的系统中的64位程序。Runtime:是由cc++以及汇编混合编写成的给OC提供运行时功能的一套API。6347155-6c20cbcf0d1b826f.
志在交流
·
2023-04-18 11:23
iOS 消息发送、动态方法解析和消息转发 objc4-838.1源码
苹果官方资源opensourceobjc4-838可编译联调源码本章节研究消息发送和消息转发:1.方法调用的实质2.objc_
msgSend
和objc_msgSendSuper的区别3.消息发送的快速查找
顶级蜗牛
·
2023-04-17 15:58
iOS objc源码学习
AdvancementsintheObjective-CruntimeWWDC2020Class数据结构变化iOS看源码:类的结构分析iOS看源码::Class和isaiOS从源码看类:allociOS看源码:cache_t方法缓存iOS看源码:objc_
msgsend
FireStroy
·
2023-04-17 10:38
iOS - 探索objc_
msgSend
慢速查找流程
上一篇我们分析了objc_
msgSend
的快速查找方法的流程,我们调用方法实际上就是发送消息,然后首先会到cache中进行查找,也即是快速查找。
Sheisone
·
2023-04-16 16:48
iOS objc_
msgSend
笔记
三大阶段:1.消息发送2.动态方法解析3.消息转发消息发送从receiverClass的class_rw_t中查找方法已经排好序的方法列表,使用二分查找没有排序的方法列表,使用遍历查找receiver通过isa找到receiverClassreceiverClass通过superClass指针找到superClass动态方法解析voidc_errorMethod(idself,SEL_cmd){N
山杨
·
2023-04-16 08:17
iOS 消息转发机制
(一)对象的消息传递机制objc_
msgSend
()这叫做“给某个对象发送某条消息”。消息有“名称”或“选择子(selector)”之说。消息可以接受参数,而且还可以有返回值。
我嘞giaogiao
·
2023-04-15 22:36
iOS底层探究:objc_
msgSend
流程分析的慢速查找
objc_
msgSend
慢速查找流程:系统先按照快速查找流程走的,如果快速的查找不到,然后进入到慢速查找流程里面。下面是慢速查找到到流程分析。
laoyao666
·
2023-04-15 08:00
【OC Runtime】消息发送机制,动态方法解析,消息转发机制
目录弄明白对象、类是怎么调用方法的就行一、消息发送机制objc_
msgSend
二、动态方法解析resolveMethod三、消息转发机制objc_msgForward四、程序崩掉unrecognizedselectorsenttoinstance
意一ineyee
·
2023-04-15 01:13
UICollectionViewFlowLayout 设置只有一个Item时居左显示
setRowAlignmentsOptions:");if([_flowLayoutrespondsToSelector:sel]){((void(*)(id,SEL,NSDictionary*))objc_
msgSend
不太擅长写代码的程序媛
·
2023-04-13 19:55
面试题load、initialize
runtime会加载类信息载入内存,相当于知道了这个类,但是没有初始化,只会调用1次,分类的load会先调用类的loadinitialize是类载第一次接收到消息的时候调用,相当于类的单例初始化,objc_
msgSend
大白菜s
·
2023-04-13 12:55
objc_
msgSend
流程分析(快速查找)
前言在我們知道了cache寫入sel-imp流程後,接下來我們探討寫入之前的消息發送的流程cache原理分析本篇重點也就是上一篇流程圖中的cachereader下的objc_
msgSend
前情提要知識拓展編譯時編譯時做了簡單的翻譯工作
黑足小貓咪
·
2023-04-12 11:52
消息传递和转发原理
消息传递流程先会调用objc_
msgSend
方法,首先在Class中的缓存查找IMP,没有缓存则初始化缓存,类对象方法列表查找。如果没有找到,则向父类的Class缓存和父类方法对象查找。
iOS白水
·
2023-04-11 14:27
iOS 消息发送之 objc_
msgSend
看到这可能有点懵逼了,这篇文章简单的介绍了下runtime之objc_
msgSend
函数的使用,也是我第一次在上写文章,错误之处还望大家包涵,希望能一起共同进步。
辣枭子
·
2023-04-10 17:37
iOS-底层原理11:消息流程分析之慢速查找
objc_
msgSend
慢速查找流程分析1.慢速查找-汇编部分在快速查找流程中,如果没有找到方法实现,无论是走到CheckMiss还是JumpMiss,最终都会走到__objc_
msgSend
_uncached
AcmenL
·
2023-04-09 07:37
iOS的消息机制
一、简介:OC的方法调用,在底层会被转化为消息发送的形式.形如:屏幕快照2019-01-25下午2.10.02.png屏幕快照2019-01-25下午2.10.17.png关于objc_
msgSend
(
司空123
·
2023-04-08 17:28
iOS 为什么给nil发送消息不会崩溃?
Objective-C中的函数调用都是通过objc_
msgSend
进行消息发送来实现的,而objc_
msgSend
会通过判断参数self来决定是否发送消息,如果传递给objc_
msgSend
的参数self
CrazyItCoder
·
2023-04-07 13:37
一次cache_getImp野指针排查
类型是SEGV_ACCER,一看就认为是对象野指针了,基本都是多线程读写导致的;但是仔细再一看crash堆栈,不是平常的objc_xxxx,而是cache_getImp这就有点怪了,和平常的objc_
msgSend
Colla
·
2023-04-07 13:54
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他