iOS: Runtime实战
ios 实战 runtime
2023-09-14 09:04:14 时间
文章目录
1.[obj foo]和objc_msgSend()函数之间有什么关系?
[obj foo]在编译后(编译器的处理过程之后)就变成了objc_msgSend(obj,selector(foo),参数…),然后开始runtime的消息传递过程
2.runtime如何通过selector找到对应的IMP地址的?
当前类的缓存–>当前类方法列表–>父类缓存–>父类方法列表–>根类缓存–>根类方法列表–>消息转发流程
3.能否向编译后的类中增加实例变量?
不能,class_ro_t,readonly,所以编译后不可修改,但是可以向动态添加的类中增加实例变量,只要在添加注册类对方法前添加实例变量就可以
4.runtime在项目中的实际使用
4.1 数组越界不崩溃 method swizzling(objectAtIndex)
- swizzlingMethod的实现
BOOL swizzlingMethod(Class aClass, SEL originalSelector, SEL swizzlingSelector) {
Method originMethod = class_getInstanceMethod(aClass, originalSelector);
Method swizzlingMathod = class_getInstanceMethod(aClass, swizzlingSelector);
BOOL didAddMethod = class_addMethod(aClass, originalSelector, method_getImplementation(swizzlingMathod), method_getTypeEncoding(swizzlingMathod));
if (didAddMethod) {
class_replaceMethod(aClass, swizzlingSelector, method_getImplementation(originMethod), method_getTypeEncoding(originMethod));
}else{
method_exchangeImplementations(originMethod, swizzlingMathod);
}
4.2 字典转模型YYModel的内部实现
4.3 大量调用某个方法时直接调用IMP
Messaging(runtime) - apple developer
4.4 textView的_placeholderLabel
iOS swift UItextField UITextView占位文字
4.5 tableView索引栏的字体大小
tableView的子视图:UITableViewIndex
iOS runtime 动态拦截方法,设置参数 tableView改变索引栏的字体大小和颜色
4.6 对页面的进出添加一些统计日志信息 method swizzling
iOS:runtime 消息转发 Method_Swizzling 动态添加方法 动态方法解析
4.7 NSClassFromString,NSSelectorFromString,performSelector进行解耦
NSClassFromString,NSSelectorFromString…
相关文章
- iOS关于苹果开发者账号及证书的一些说明
- iOS 获取本地图片尺寸_ios图片处理软件
- iOS锁屏时钟_ios时钟怎么调
- IOS内测记录:在自有App中运行小程序游戏
- ios设备开发教程-利用app申请ios开发证书及描述文件
- 【IOS 开发】Objective - C 语法 之 流程控制
- app store/ios开发证书、发布证书、推送证书的快捷制作
- AnyTrans for iOS for mac(ios数据传输管理工具)
- 关于 iOS 上的 PWA 应用,你需要知道些什么详解手机开发
- 探索Linux系统:在iOS上下载(linux系统ios下载)
- appLinux开发探索之路:从iOS APP开始(linux开发ios)
- MacOS 与 iOS:由浅入深的连接(macos和ios)
- 让Linux开发iOS应用变得更简单(linux开发ios应用)
- 苹果 iOS/iPadOS 15 开发者预览版 Beta4(19A5307g)发布:改进 Safari 设计,增加 MagSafe 支持等
- iOS 不是 Linux,而是苹果独特操作系统(ios是linux吗)
- iOS访问MySQL数据库的实战技术(ios访问mysql)
- 开启一个崭新世界:Linux与iOS系统(linux系统ios)
- IOS上可以安装Oracle吗(ios能装oracle吗)
- iOS 轻松登录 Oracle 数据库(ios 登陆oracle)
- IOS系统有支持Oracle吗(ios支持oracle吗)
- iOS让Oracle无处不在(ios支持oracle么)