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
ios c语言调用oc方法,ios-面试-OC 方法调用的过程原理
OC中的所有方法调用,最终都是转换成runtime中的一个C语言消息分发函数:
objc_msgSend
(消息接收者,方法名,参数。。。)
weixin_39615419
·
2024-09-05 07:16
ios
c语言调用oc方法
objc_msgSend
动态查找
1.objc_class的chache找2.在对象的方法列表里找3.去父类指针指向的对象中去执行1.24.直到根类也没找到就消息转发5.调用resolveInstanceMethod让类添加这个方法的实现6.forwardingTargetForSelector让对象执行这个函数7.forwordInvocation更灵活的处理函数调用8.都没找到doesNotRecognizeSelector
Jonnyking
·
2024-02-14 15:04
【Effective Objective - C 2.0】——读书笔记(二)
文章目录前言六、理解“属性”这一概念七、在对象内部尽量直接访问实例变量八、理解“对象等同性”这一概念九、以“类族模式”隐藏实现细节十、在既有类中使用关联对象存放自定义数据十一、理解
objc_msgSend
温柔何曾赋我
·
2024-02-12 07:15
c语言
ios
objective-c
OC中的Category(三)
调用initialize方法是通过runtime的
objc_msgSend
的方式调用,所以会存在如果子类没有实现会调用父类的initialize方法,并且优先调用类分类中存在的initializ方法+ini
aaayia
·
2024-02-10 07:32
objc_msgSend
流程分析
背景如果大家用clang编译编译过oc的代码,你会发现oc的所有方法调用最终都都转换成了
objc_msgSend
,而它内部是如何实现的呢,对于我们开发过程中经常遇到的unrecognizedselectorsenttoinstance
会跑的鱼_09
·
2024-02-09 01:50
Objc_msgSend
流程
在了解
objc_msgSend
之前,需要先了解runtime。Runtime是一套底层纯C语言API,Objective-C代码最终都会被编译器转化为运行时代码,通过消息机制决定函数调用方式。
_涼城
·
2024-02-02 09:05
iOS--经典问题:runtime三种调用方式
includeintmain(intargc,constchar*argv[]){@autoreleasepool{//insertcodehere...Person*p=[[Personalloc]init];[prun];
objc_msgSend
OXHO
·
2024-02-01 22:10
ios runtime入门
OC通过消息发送进行传递的
objc_msgSend
(class,SEL,arg1,arg2,...);class:消息的接收者,SEL
Mjs
·
2024-01-31 12:54
Objective-C:Runtime
objc_msgSend
底层调用有3大阶段1.消息发送
objc_msgSend
执行流程01-消息发送.png2.动态方法解析
objc_msgSend
执行流程02-动态方法解析.pngvoidc_other
zhouluyao
·
2024-01-31 07:16
Effective oc 2.0 第二章学习--对象、消息、运行期
、运行期前言理解属性这一概念属性特质原子性读写权限内存管理语义方法名注意的点要点在对象内部尽量直接访问实例变量注意的点要点理解“对象等同性”这一概念特定类所具有的等同性判断方法等同性判断的执行深度理解
objc_msgSend
菜的不敢吱声
·
2024-01-29 18:58
学习
ios
objective-c
oc 分类方法、+(void)load、+(void)initialize方法调用分析
把方法汇总到一个addedList数组中,所以最后参与编译的分类方法在addedList的最前面3、把2中的addedList的方法整体插入到类对象的methodList的最前面4、当上层在调用某个方法时通过
objc_msgSend
森_ab60
·
2024-01-29 17:15
谈谈你对Runtime的理解
1.讲一下oc的消息机制OC的方法调用其实都转成的objc_magSend函数的调用,给方法调用者发送一条消息
objc_msgSend
底层有3大阶段:消息发送(从当前类父类中查找)、动态方法解析、消息转发
麟枫_Jack
·
2024-01-28 21:39
IOS开发谈谈对Runtime 和 Runloop的理解
作用消息机制原理:对象根据方法编号SEL去映射表查找对应的方法实现方法调用的本质就是让对象发送消息
objc_msgSend
,只用对象才能发送消息,因此以objc开头。
谢千域
·
2024-01-25 12:31
Objective-C Runtime Programming
编译器将其转化为:
objc_msgSend
(receiver,selector,arg1,arg2,...)。
农场主er
·
2024-01-25 02:46
#
Objective-C
ios
objective-c
OC,
objc_msgSend
()函数做了哪些事
OC,
objc_msgSend
()简介:用一句话简介消息传递那就是:用一个C语言函数,向一个实例传递一个字符串,实例拿到字符串后与自己的method_list中的SEL比较,遇到一样的就找到对应IMP执行
BangRaJun
·
2024-01-23 13:31
oc-底层原理之
objc_msgSend
方法快速查找
这篇文章我们在来研究一下方法的查找方法的查找有两条线路:快速查找(通过汇编实现)慢速查找(通过c实现)(下一篇文章再来探究)方法快速查找方法的快速查找实际是通过缓存来查找,在探究之前,我们先来了解一下
objc_msgSend
沉默Coder
·
2024-01-22 15:41
深入解构
objc_msgSend
函数的实现
objc_class(Class对象)结构简介熟悉OC语言的Runtime(运行时)机制以及对象方法调用机制的开发者都知道,所有OC方法调用在编译时都会转化为对C函数
objc_msgSend
的调用。
余青松
·
2024-01-16 14:56
iOS底层 -- Category本质之load、initialize方法
在程序运行过程中只调用一次调用顺序先调用类的+load按照编译先后顺序调用(先编译,先调用)调用子类的+load之前会先调用父类的+load再调用分类的+load按照编译先后顺序调用(先编译,先调用)调用方式根据方法地址直接调用,并不是经过
objc_msgSend
happy神悦
·
2024-01-14 04:07
objc_msgSend
执行流程
oc对象(包括类对象和实例对象)调用方法,主要有3个步骤,分别是消息发送,动态方法解析,消息转发1.消息发送消息发送2.动态方法解析动态方法解析说明其中YMPerson类的.h文件中声明一个-run方法,但.m文件没有进行方法的实现。如果直接调用YMPerson实例对象的run方法,会报找不到方法的崩溃。但在.m实现了+resolveInstanceMethod,并在其中动态添加了方法之后,实例对
xxxxxxxxx_ios
·
2024-01-08 01:32
Xcode导入runtime框架函数参数没有提示或Too many arguments to function call, expected 0, have 2错误
首先说明下,在Xcode6之前运用
objc_msgSend
,是有参数提示的。但是从Xcode6之后,苹果不推荐我们使用runtime,所以就取消了参数提示功能。估计是不想让我们过多的了解底层。
月沉眠love
·
2024-01-04 04:42
_lookUpImpOrForward慢速方法查找
前言在《IOS底层原理之Runimte运行时&方法的本质》一文中已经分析了
objc_msgSend
查找缓存(cache)的流程,也就是
objc_msgSend
的快速查找流程,当cache中找不到imp的时候
冼同学
·
2023-12-30 22:12
iOS Runtime学习(二) -- Runtime执行顺序
来支撑和实现的,而Runtime是一套C语言的API,它封装了很多动态性相关的函数我们平时编写的OC代码,其实底层都是将代码转换成了RuntimeAPI来进行调用二、OC的消息机制OC的方法调用其实都是转成了
objc_msgSend
Q海龙
·
2023-12-30 01:12
八、消息流程之慢速查找
在Object-C中调方法在底层就是调
objc_msgSend
进行发送消息,消息发送时先在Class的cache中查找imp,这一步为快速查找,在cache中没有找到,就会在bits中查找,这一步为慢速查找
Mlqq
·
2023-12-27 08:14
iOS底层探索四(isa初探-联合体,位域,内存优化)
iOS底层探索三(内存对齐与calloc分析)iOS底层探索五(isa与类的关系)iOS底层探索六(类的分析上)iOS底层探索七(类的分析下)iOS底层探索八(方法本质上)iOS底层探索九(方法的本质下
objc_msgSend
ZhaiAlan
·
2023-12-23 07:05
iOS底层
iOS源码
iOS开发
objective-c
ios
一个实例对象调用方法的调用过程
一个实例对象调用方法的调用过程编译->变成
objc_msgSend
(id,SEL,...)根据示例对象的isa指针,找到该对象的Class在Class中根据SEL方法名寻找函数实现IMP寻找过程先在当前类的
_一叶孤帆
·
2023-12-21 01:40
第十一节—
objc_msgSend
(三)动态决议
本文为L_Ares个人写作,以任何形式转载请表明原文出处。在第九节快速查找流程和第十节慢速查找流程之后,方法的查找流程就已经完成了。但是在第十节慢速查找流程的done之前的最后一步仍然没有找到方法的实现,还没有介绍。那一步就是本节的重点——动态决议,也叫动态方法解析。动态决议的目的是:给没有找到imp的类一次通过resolveInstanceMethod添加imp的机会。从而不进行崩溃的信息打印,
L_Ares
·
2023-12-02 22:05
Initialize方法底层实现
initialize方法调用时机:initialize在类第一次接收到消息时调用,也就是
objc_msgSend
(),当一个类在查找方法的时候,会先判断当前类是否初始化,如果没有初始化就会去调用initialize
code_ce
·
2023-11-30 21:02
iOS-底层原理-消息流程
objc_msgSend
分析之methodList(慢速查找)、动态方法决议、消息转发
1.什么是慢速查找、动态方法决议、消息转发前面的博客介绍了,objs_msgSend查找cache的快速查找流程,即实例对象查找类对象cache,类对象查找元类对象的cache,也就是说,通过isa指向找到第一个查找节点的cache,进而汇编语言进行快速查找,那么第一个节点的methodList怎么查找,什么时候查找,后面父类的cache和methodList呢?父类的cache查找和我们前面分析
如意神王
·
2023-11-29 01:59
iOS runtime使用
1.发送消息
objc_msgSend
(obj,@selector(func));调用实例方法
objc_msgSend
([Objclass],@selector(func));调用类方法2.交换方法//加载内存时调用
罗马危机
·
2023-11-27 17:43
Objective-C的消息转发机制
1.Objective-C中方法的调用在Runtime期间,都会转为
objc_msgSend
(receiver,selector,arg1,arg2,...).默认的
objc_msgSend
会接收两个隐藏的参数
我的昵称是小狼
·
2023-11-27 06:15
objc_msgSend
之方法快速与慢速查找
在上篇Runtime学习之
objc_msgSend
分析中我们简单的介绍了下对于Runtime的理解,以及
objc_msgSend
消息转发的流程做了简单介绍,那么今天我们就整体的做一次流程的分析和梳理,方便后续的学习总结一
Mr_yu__
·
2023-11-22 06:46
ios
objective-c
xcode
算法
flutter
ISA的结构详解
我们知道,任何一个对象都有一个isa,通过isa指向,可以找到父类,以及根元类的相关的实例方法,在iOS开发过程中isa的作用可以说非常重要,不可替代,因为有了iOS,系统才能才是实现相关的runtime、
objc_msgSend
携YOU手同行
·
2023-11-21 13:10
(四)消息与运行期
第11条:理解
objc_msgSend
。Objective-C是C的超集,所以有必要先理解C语言的函数调用方式。
不会游的海鸥
·
2023-11-20 17:08
发现程序崩在一个
objc_msgSend
函数里面,这时候可以看的到当前正在调用哪个对象的哪个selector吗?
是可以的。崩溃在这里,有两种可能,一个是Receiver出问题,一种是selector出问题。最常见的就是僵尸对象,向已经释放的对象发送消息。还有野指针。常用解决方法。1、在scheme中打开对象跟踪的属性EnableZombieObjects2、使用Instruments-Zombies检测https://blog.csdn.net/potato512/article/details/56281
natewang
·
2023-11-19 11:04
Runtime之
objc_msgSend
底层窥探上
在Object-c中,方法调用大家都会,但它的底层到底是怎么实现的呢,如何通过SEL来找到IMP的呢。开始我也不知道,幸亏苹果开源了runtime的部分源码,可以在里面找到答案。SEL怎么找到IMPobjc_msgSend的过程大致是1、先从接收者类的cache中查找方法,找到了直接返回IMP2、没找到就从消息接收者的方法列表查找.3、从Superclass的缓存列表找4、从Superclass的
BetterG
·
2023-11-06 10:55
iOS 底层原理 - 方法的本质
objc_msgSend
分析
Runtime的介绍要看方法的本质先简单介绍一下Runtime。Objective-C是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象、进行消息传递和转发,也就是Runtime。Runtime是一套由C,C++,汇编写成的一套api,为OC提供运行时功能。为什么不用OC呢,这是因为对我们编译器来说,OC属于更高级的语言,相比于C和C++以及汇编,执行效率更慢,
yan0_0
·
2023-11-06 09:50
iOS 运行时
的指针.可以通过Objc编译器器命令@selector()或者Runtime系统的sel_registerName函数来获取一个SEL类型的方法选择器.IMP实际上是一个函数指针,指向方法实现的地址.
objc_msgSend
星星编程
·
2023-11-05 18:13
iOS底层 - 方法慢速查找流程分析
iOS开发底层探究之路慢速查找汇编分析在上篇文章iOS底层-
objc_msgSend
快速查找流程分析中我们分析了通过汇编进行的
objc_msgSend
快速查找流程:CacheLookup汇编方法在cache
Lcr111
·
2023-11-04 15:54
objc_msgSend
底层探索(上)
我这篇文章呢,主要来分析一下
objc_msgSend
,关于他的一个执行流程和快速查找的过程,那首先我需要了解一下Runtime是怎么调起底层的呢?也就是Runtime是怎么发起的呢?
iOS慢慢
·
2023-11-04 06:28
iOS消息转发
我们已经研究了
objc_msgSend
从汇编快速查找缓存流程,慢速查找流程,动态方法决议流程,如果这几个流程下来都没找到合适的执行方法,接下来就会走到消息转发流程。消息转发流程都有哪些呢?
镜像
·
2023-10-31 05:17
用运行时命令实现不引入头文件
2018年9月21日一.前期准备1.如需要项目支持
objc_msgSend
工程如下修改:image.png2.常见几种类型函数原型a.无返回值无参数void*(*action)(id,SEL)=(void
wangyu2488
·
2023-10-30 07:43
iOS底层学习 -
objc_msgSend
慢速查找流程分析
上一篇中,分析了快速查找流程,如果快速查不到,则需要进入慢速查找流程,核心方法_lookUpImpOrForward。慢速查找底层源码_lookUpImpOrForward慢速查找流程IMPlookUpImpOrForward(idinst,SELsel,Classcls,intbehavior){//定义的消息转发constIMPforward_imp=(IMP)_objc_msgForward
w執念
·
2023-10-29 20:14
objc_msgSend
-(void)runTimeClicked{//
objc_msgSend
(self,@selector(testRuntime));SELtestFunc=NSSelectorFromString(@"
Smallwolf_JS
·
2023-10-29 00:46
iOS 消息发送、转发机制
中调用方法:[xiaomingeat:apple];在方法调用的时候,runtime会将上面的方法调用转化成一个C语言的函数调用,表示朝着xiaoming发了一个eat:消息,并传入了apple这个参数:
objc_msgSend
第三天
·
2023-10-27 19:18
OC方法调用流程
基本概括OC中的方法调用其实都是转成了
objc_msgSend
函数的调用,给receiver(方法调用者)发送了一条消息(selector方法名)三大阶段消息发送(当前类,父类中查找)动态方法解析消息转发
衣一口田
·
2023-10-24 10:33
objc_msgSend
分析之快速查找
本文的主要目的是理解
objc_msgSend
的方法查找流程,上一篇文章objc_class中cache原理分析中,分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即
objc_msgSend
辉辉岁月
·
2023-10-23 23:46
iOS底层学习 -
objc_msgSend
快速查找流程分析
在探索
objc_msgSend
时,我们需要先了解OC的runtime机制。
w執念
·
2023-10-20 19:22
iOS 内存管理(二)
简介深入了解ARC,主要从一下几个修饰符深入了解__strong/__weak/_atuoreleasing1、__strong首先时当编译器初始化strong类型对象时,编译器伪代码如下idobj=
objc_msgSend
Damon_Rao
·
2023-10-18 00:08
iOS底层-
objc_msgSend
慢速查找流程分析
慢速查找-汇编部分在objc-msg-arm64.s文件中查找__objc_msgSend_uncached的汇编实现,其中的核心是MethodTableLookup(即查询方法列表),其源码如下.macroMethodTableLookup//pushframeSignLRstpfp,lr,[sp,#-16]!movfp,sp//saveparameterregisters:x0..x8,q0.
含笑州
·
2023-10-16 22:24
记录Clang插桩HOOK
官方文档http://clang.llvm.org/docs/SanitizerCoverage.html当我们hookoc函数的时候其原理是
objc_msgSend
只能hook一些oc的函数对于系统的库函数
第x个等于4乘x的阶乘
·
2023-10-15 15:52
上一页
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
其他