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
objc_msgSend
objc_msgSend
(二)
在objc_mgsSend(一)中我们分析了快速查找流程,如果快速查不到,则需要进入慢速查找流程在快速查找流程中,如果没有找到方法实现,会走到CheckMiss或是JumpMiss,汇编代码如下:.macroCheckMiss//missifbucket->sel==0.if$0==GETIMPcbzp9,LGetImpMiss.elseif$0==NORMALcbzp9,__objc_msgSe
小糾丶羯
·
2023-01-27 01:19
从汇编角度分析
objc_msgSend
的hook过程
objc_msgSend
是基于汇编实现的,hookobjc_msgSend和我们平时hookOC方法不一样,在github上有开源的项目通过hookobjc_msgSend来监控每个函数的耗时情况。
806349745123
·
2023-01-26 23:54
技术点
连接+initialize方法会在类第一次接收到消息时调用+initialize消息发送机制(
objc_msgSend
)调用顺序先调用父类的+initialize,再调用子类的+initialize(先初始化父类
年轻就要活出样
·
2023-01-26 17:11
NSProxy 的简单介绍和使用
1、首先简单说一下OC消息发送机制消息发送分两步:第一步,编译阶段不带参数:
objc_msgSend
(receiver,selector)带参数:
objc_msgSend
(recevier,selector
ZJ_偶尔上路
·
2023-01-26 03:18
八 OC底层原理 方法查找
简介在前面我们知道,当我们使用xcrun将文件编译成cpp文件的时候就可以看到方法的本质就是消息,调用方法也就是发送消息,这就有一个很重要的函数
objc_msgSend
,下面我们就来看看消息发送的实现从下面的注释
可乐冒气
·
2023-01-26 03:48
iOS面试准备 - ios篇
+篇iOS面试准备-其他篇运行时https://juejin.cn/post/6844903586216804359Runtime消息发送机制首先进行方法的查找:1)iOS调用一个方法时,实际上会调用
objc_msgSend
smallcatlei
·
2022-07-28 12:30
ios
面试
objective-c
OC方法交换swizzle详细介绍——不再有盲点
原理oc的方法调用,比如[selftest]会转换为
objc_msgSend
(self,@selfector(test))。
时间已静止
·
2022-06-21 17:24
OC底层探索之消息转发
OC底层探索之
objc_msgSend
我们探索了消息的快速查找和慢速查找。那如果都找不到会系统会怎么处理呢?
DebugTheWorld
·
2022-05-13 16:08
iOS基础知识 (一)
1、Runtime消息发送机制1)iOS调用一个方法时,实际上会调用
objc_msgSend
(receiver,selector,arg1,arg2,...)
笨笨编程
·
2022-03-07 09:20
iOS-底层原理 14:消息流程分析之 动态方法决议 & 消息转发
iOS底层原理文章汇总引子在前面两篇文章iOS-底层原理12:
objc_msgSend
流程分析之快速查找和iOS-底层原理13:
objc_msgSend
流程分析之慢速查找中,分别分析了
objc_msgSend
Style_月月
·
2022-02-22 02:04
OC底层原理十三:
objc_msgSend
(方法慢速查找)
我们对象(实例对象或类)调用方法,都是执行
objc_msgSend
:step1:进入汇编语言,在cache中快速查找,找到了返回imp,没找到走step2step2:进入c/c++底层,在methodList
markhetao
·
2022-02-22 02:52
iOS - 消息流程之动态方法决议 & 消息转发
在前面两篇文章iOS-消息流程之快速查找和iOS-消息流程之慢速查找中,分别分析了
objc_msgSend
的快速查找和慢速查找在这两种都没找到方法实现的情况下,苹果给了两个建议动态方法决议:慢速查找流程未找到后
Gumball_a45f
·
2022-02-20 10:03
iOS-底层探索09:方法的慢速查找流程分析
iOS底层探索文章汇总目录一、前言二、一个方法查找流程的问题三、方法慢速查找流程分析四、动态方法决议(动态解析)五、总结一、前言上一篇文章iOSobjc_msgSend流程分析中我们分析了
objc_msgSend
differ_iOSER
·
2022-02-20 08:06
Runtime 见闻整理
Objective-C的对象是基于Runtime创建的结构体image消息分发//创建person对象Person*p=[[Personalloc]init];//调用对象方法[peat];//本质:让对象发送消息
objc_msgSend
代码守望者
·
2022-02-20 04:43
Effective Objective-C 2.0 第二章 11、理解
objc_msgSend
的作用
我之前一篇文章iOSruntime消息机制及消息转发对此有详细介绍。本篇简单介绍下书中内容。在对象上调用方法,又叫“传递消息”。由于Objective-C是C的超集,所以最好先理解C语言的函数调用方式。C语言使用“静态绑定”(staticbinding),也就是说,在编译期就能决定运行时所应调用的函数。以下列代码为例:#importvoidprintHello(){printf("Hello,wo
Vergil_wj
·
2022-02-19 17:09
OC底层原理十二:
objc_msgSend
(方法快速查找)
OC底层原理学习大纲上一节已了解类的cache结构和插入操作。但是有几个问题:1.何时插入缓存?2.缓存读取机制是怎样?cache分析流程现在开始探索之旅1.探索插入操作2.介绍Runtime3.了解方法的本质4.objc_msgSend解析1.探索插入操作我们从insert开始寻找谁在调用它在objc4源码下搜索->insert((c++的调用方式->)image.png发现cache_fill
markhetao
·
2022-02-18 23:10
探索Objective-C对象调用方法最终生成C语言
在OC对象调用实例方法的时候最终都会转为
objc_msgSend
例如在viewController对象调用如下方法:[selftestString:@"哈哈"intValue:100stringValue
Jniying
·
2022-02-18 07:56
iOS底层原理 09 :
objc_msgSend
快速查找流程
1.RuntimeObjective-CRuntimeProgrammingGuideRuntime就是使用C,C++和汇编混合而成的,为OC提供运行时特性的一套机制。2.Runtime底层首先通过Clang编译main.c文件intmain(intargc,constchar*argv[]){@autoreleasepool{LGPerson*person=[LGPersonalloc];[pe
smooth_lgh
·
2022-02-17 22:54
OC底层原理07--Runtime以及
objc_msgSend
分析(一)
一、感受运行时什么是runtime?为OC提供运行机制,用C/C++写成的,通过底层的API、OC源码、调用方法、基础语法、framework、service接口等为OC层面提供的运行制机制。它也是为面向对象(OOP)提供运行时机制;在运行过程中,让对象找到真正的执行逻辑,包括内存布局(isa的走位指向)。再来理解下Apple的从编译时间和链接时间到运行时,Objective-C语言会尽可能多地推
夏天的枫_
·
2022-02-16 06:53
01--方法本质03--面试题分析
对方法的探索,全篇分六个章节01-方法本质-方法初探02-方法本质-
objc_msgSend
的使用03-方法本质-面试题分析04-方法本质-lookUpImpOrForward介绍05-方法本质-消息查找流程
修_远
·
2022-02-16 02:20
IOS底层原理之
objc_msgSend
一、clang指令探查方法调用Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。如果你不知道clang,可以在这里找到你想要的。在工程目录中的main.m文件目录下进入到终端,输入如下命令clang-rewrite-objcmain.m-omain.cpp该命令会将main.m编译成C++的代码,但是不同平台支持的代码肯定是不一样的。xcrun-sdki
风紧扯呼
·
2022-02-15 23:06
理解消息转发(message forwarding)
之前的文章中,我们理解了消息发送(
objc_msgSend
),具体地址点这里,并且遗留了一个问题:如果对象收到无法解读的消息之后,会发什么?
ch212342
·
2022-02-15 12:35
ios OC方法调用流程(如何避免找不到方法而崩溃)
OC中方法调用本质就是
objc_msgSend
(idtarget,selector)函数的调用,如果是对象方法,那么这个target是类对象;如果是类方法,则这个target是元类对象。
liang1030
·
2022-02-14 19:02
简述利用Runtime机制的几种方法
objc_msgSend
,只有对象才能发送消息,因此以objc开头.使用消息机制前提,必须导入#import1消息机制简单使用//创建person对象Person*p=[[Personalloc]init
AI衣衣
·
2022-02-13 12:32
OC 消息查找流程
上一篇OC方法的本质中提到OC的方法调用依赖于runtime实现的api(
objc_msgSend
、objc_msgSendSuper等等)提供消息发送功能实现的。
Onego
·
2022-02-13 00:02
iOS-底层原理 12:消息流程分析之快速查找
iOS底层原理文章汇总本文的主要目的是理解
objc_msgSend
的方法查找流程在上一篇文章iOS-底层原理11:objc_class中cache原理分析中,分析了cache的写入流程,在写入流程之前,
Style_月月
·
2022-02-11 15:47
3,消息转发机制
1,OC方法的调用OC中的方法调用其实都是转成了
objc_msgSend
函数的调用,给receiver(方法调用者)发送了一条消息(selector方法名)而
objc_msgSend
的执行流程又可以分为
ForstDragon
·
2022-02-11 07:55
iOS-OC底层08:
objc_msgSend
慢速查找
前沿在
objc_msgSend
缓存中读取IMP中,如果缓存没有找到会有下面方法.macroCheckMiss//missifbucket->sel==0.if$0==GETIMPcbzp9,LGetImpMiss.elseif
MonKey_Money
·
2022-02-09 20:33
iOS 底层探索:
objc_msgSend
动态方法决议 & 消息转发
iOS底层探索:学习大纲OC篇前言OC调用方法,底层是调用
objc_msgSend
发送消息。
欧德尔丶胡
·
2022-02-09 11:40
iOS 底层探索 - 消息查找
消息查找.pngiOS底层探索系列iOS底层探索-alloc&initiOS底层探索-calloc和isaiOS底层探索-类iOS底层探索-cache_tiOS底层探索-方法iOS底层探索-消息查找一、
objc_msgSend
leejunhui
·
2022-02-09 06:34
iOS 消息转发机制(实现多继承)
如果在本类中找不到对应的selector,则
objc_msgSend
会向其父类的methodlist中查找selector,如果还不能找到则沿着继承关系一直向上查找,直到找到NSObject类。
ChinaChong
·
2022-02-09 04:27
iOS消息转发机制
iOS方法调用实际上就是消息转发过程最简单的方法调用:[[MessageSendnew]sendMessage:@"Hello"];//等同于//
objc_msgSend
([MessageSendnew
Eddiegooo
·
2022-02-08 11:07
OC底层原理:
objc_msgSend
全流程图
OC底层原理学习大纲如果你已经了解了
objc_msgSend
,或者看过我的
objc_msgSend
系列:OC底层原理十二:
objc_msgSend
(方法快速查找)OC底层原理十三:
objc_msgSend
markhetao
·
2022-02-07 09:27
iOS底层原理 10 : 方法的慢速查找流程
我们回到
objc_msgSend
汇编部分,我们看到最后还是没有找到的话就会到JumpMiss最终$0==NORMAL,会走到__objc_msgSend_uncached。.
smooth_lgh
·
2022-02-07 06:51
OC消息转发(二)— 消息的查找流程探索
前言上篇文章我们对
objc_msgSend
进行了探索,主要是快速查找流程的汇编语言探索,最终我们探索到了__class_lookupMethodAndLoadCache3方法,然后我们猜测该方法的实现是
小满豆
·
2022-02-06 21:58
iOS之武功秘籍⑥:Runtime之方法与消息
iOS之武功秘籍文章汇总写在前面上文说到cache_t缓存的是方法,我们分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即
objc_msgSend
和cache_getImp.那么方法又是什么呢
長茳
·
2022-02-06 01:56
OC消息转发(一)—
objc_msgSend
探索
前言该系列我们来探究一下OC的消息发送和转发机制,本文我们就来对
objc_msgSend
做一下初步探索,明白方法调用是如何快速寻找到方法的。
小满豆
·
2022-02-05 18:13
iOS-OC底层09:动态方法决议 & 消息转发
前沿我们在oc层面调用对象方法实质是向某对象发送消息也就是
objc_msgSend
,
objc_msgSend
需要找到对应方法的实现也就是函数指针IMP,查找IMP首先在缓存中查找也就是快速查找,然后慢速查找也就是在类的方法类表中查找
MonKey_Money
·
2022-02-05 13:51
iOS 底层探索:
objc_msgSend
快速查找
iOS底层探索:学习大纲OC篇前言这篇主要内容是分析消息转发机制
objc_msgSend
。
欧德尔丶胡
·
2022-02-03 06:05
Swift - 类与结构体(下)
1.struct结构体方法调用探究探究方法调用的过程,我们知道在OC中,调用一个方法的本质是消息传递,底层通过
objc_msgSend
函数去查找方法并调用。
Mr木子李
·
2022-01-09 00:54
iOS中yy_model解析
JSON转Modelidjson—>dict—>Model原理是用Runtime换取Model的属性,生成映射表,然后
objc_msgSend
(…)调用setter方法赋值你给我一个Model类,我会用
Silence_xl
·
2021-12-06 09:54
laod和initialize
laod和initialize+load+load方法会在runtime加载类、分类时调用,每个类、分类的+load,在程序运行过程中只调用一次,+load方法是根据方法地址直接调用,并不是经过
objc_msgSend
乔克蜀黍
·
2021-11-21 15:03
iOS底层探索之Runtime(一):运行时&方法的本质
后面通过断点查看汇编可以发现在insert方法调用流程之前,还有一个cache读取流程,
objc_msgSend
和cache_get
俊而不逊
·
2021-11-10 09:00
Runtime(二)
objc_msgSend
执行流程OC中的方法调用,其实都是转换为
objc_msgSend
函数的调用Student*st=[[Studentalloc]init];[sttest];在底层会这么调用
objc_msgSend
乔克蜀黍
·
2021-11-03 10:02
系统底层源码分析(18)——
objc_msgSend
当我们调用方法时,进入汇编模式可以发现,底层其实会调用
objc_msgSend
进行快速查找,这个方法是用汇编写的,详请我们就不看了,就主要看流程:1.对接受者进行判空处理:检查这个selector是不是要忽略
无悔zero
·
2021-10-15 17:14
系统底层源码分析(19)——动态方法决议&消息转发
接着上篇文章(系统底层源码分析(18)——
objc_msgSend
)继续说:IMPlookUpImpOrForward(Classcls,SELsel,idinst,boolinitialize,boolcache
无悔zero
·
2021-10-15 17:21
iOS消息传递
objc_msgSend
底层详解(下)
前言上一篇讲解了
objc_msgSend
调用流程并在缓存中找到对应方法。今天我们来详解在缓存中找不到对应方法的情况。
囤囤fc
·
2021-10-09 17:13
iOS消息传递
objc_msgSend
底层详解(上)
前言上一节我们了解了cache_t的结构,取出了缓存中的方法,并且探究了插入方法的每一个步骤。但目前我们对于缓存的机制了解的还不全面,已知insert是插入方法到缓存中,但从方法的调用到插入方法到缓存之间做了什么呢?具体流程是什么?今天我们继续来分析。cache工作流程在objc_cache.mm文件中,有一段注释描述cache的流程:*Cachereaders(PC-checkedbycolle
囤囤fc
·
2021-10-09 14:02
iOS底层探索之
objc_msgSend
流程——快速查找
objc_msgsendruntime运行时编译时:顾名思义就是正在编译的时候,把源代码编译成机器能识别的语言,主要是对语言进行最基本的检查报错,即词法分析、语法分析等,是一个静态的阶段。command+b。运行时:就是代码跑起来被装载到内存中去了,如果此时出错,程序会崩溃,是一个动态的阶段。command+Rruntime:一套由C/C++``汇编写成的为我们OC提供运行时功能的API。现行对应
安静的泼猴
·
2021-09-16 10:50
objc_msgSend
一些小总结
objc_msgSend
从编译后的CPP文件开始Man*msgMan=[[Manalloc]init];xcrun--sdkiphoneosclang-archarm64-rewrite-objcmain.m-omain.cpp
Priders
·
2021-08-26 19:32
上一页
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
其他