c语言文件里能调用ios方法么,iOS,Obj-c中的方法调用,objc_msgSend

本文深入探讨了Objective-C中的消息发送流程,包括缓存命中和未命中的处理,以及objc_msgSend函数在不同情况下的行为。通过对objc_msgSend和objc_msgLookup函数的分析,揭示了类查找和消息转发的关键步骤。
摘要由CSDN通过智能技术生成

ENTRY _objc_msgSend

cbz r0, LNilReceiver_f

ldr r9, [r0]// r9 =

self->isa

GetClassFromIsa // r9 =

class

CacheLookup NORMAL

// cache hit, IMP in r12, eq already set for nonstret

forwarding

bx r12// call imp

CacheLookup2 NORMAL

// cache miss

ldr r9, [r0]// r9 =

self->isa

GetClassFromIsa // r9 =

class

b __objc_msgSend_uncached

LNilReceiver:

// r0 is already zero

mov r1, #0

mov r2, #0

mov r3, #0

FP_RETURN_ZERO

bx lr

END_ENTRY _objc_msgSend

ENTRY _objc_msgLookup

cbz r0, LNilReceiver_f

ldr r9, [r0]// r9 =

self->isa

GetClassFromIsa // r9 =

class

CacheLookup NORMAL

// cache hit, IMP in r12, eq already set for nonstret

forwarding

bx lr

CacheLookup2 NORMAL

// cache miss

ldr r9, [r0]// r9 =

self->isa

GetClassFromIsa // r9 =

class

b __objc_msgLookup_uncached

LNilReceiver:

MI_GET_ADDRESS(r12, __objc_msgNil)

bx lr

END_ENTRY _objc_msgLookup

STATIC_ENTRY __objc_msgNil

// r0 is already zero

mov r1, #0

mov r2, #0

mov r3, #0

FP_RETURN_ZERO

bx lr

END_ENTRY __objc_msgNil

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值