- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
iOS-Runtime在开发中的使用及相关面试题讲述
iOS-Runtime在开发中的使用及相关面试题
OC语言中最为强大的莫过于OC的运行时机制-Runtime,但因其比较接近底层,一旦使用Runtime出现bug,将很难调试,所以Runtime在开发中能不用就不用.下面我将介绍一些Runtime在开发中的使用,已经面试可能遇见的面试题.
1.OC语法和Runtime语法的区别
OC语法和Runtime语法的区别,换而言之就是OC中我们写的语句,最终被转换成Runtime中什么样语句.由于Xcode6之后,苹果不建议使用Runtime,也就是现在在编译的时候,runtime的函数不会提示,需要去配置一下:
// 配置步骤: build Seting - 有哪些信誉好的足球投注网站msg - 设置成NO
创建一个控制台程序,在自动释放池中写如下代码:
NSObject *objc = [NSObject alloc];
objc = [objc init];
然后切换到终端命令行,执行以下步骤:
cd 切换到你想生成的那个根文件的上一级目录
clang -rewrite-objc main.m // clang -rewrite-objc 目标文件
会在该目录文件下生成一个.cpp文件,打开之后有哪些信誉好的足球投注网站@autoreleasepool(这也就是当时为什么创建控制器程序的原因,好查找转换后的代码在哪儿),就会找到转换后的代码:
NSObject *objc = ((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass(NSObject), sel_registerName(alloc));
objc = ((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)objc, sel_registerName(init));
上面的代码比较原生态,我们要是直接写runtime的代码如下所示,就能达到创建一个NSObject对象的目的:
// objc_msgSend: 两个参数 1. 谁发送这个消息 2. 发送给谁
NSObject *objc = objc_msgSend([NSObject class], @selector(alloc));
objc = objc_msgSend(objc, @selector(init));
2.消息机制,调用私有方法
面试题: runtime是什么?或者是同类的
答: 其实runtime就是运行时机制,可以通过命令行clang -rewrite-objc 对应的目标文件,就能将对应的OC的代码转成对应的运行时的代码
若是面试官问runtime中是怎么找到对应的方法的,该怎么回答?
答: 首先确定问的是对象方法还是类方法,对象方法保存到类中,类方法保存到元类(meta class),每一个类都有方法列表methodList,每一个方法在方法列表中都有对应的方法编号.(1)根据对象的isa去对应的类查找方法,isa: 判断去哪个类找对应的方法,指向方法调用的类 (2)根据传入的方法编号,才能在方法列表中找到对应得方法Method(方法名).(3)根据方法名(函数入口)找到函数实现
知识扩充: 其实每个方法最终转换成函数的形式,存放在方法区,而每一个函数的函数名都是函数的入口
访问类中私有方法的代码如下:
在对应类中的@implementation实现私有方法:
复制代码
#import Person.h
@implementation Person
- (void)eat {
NSLog(@吃吃吃);
}
- (void)run: (int)num {
NSLog(@跑了%d米, num);
}
@end
复制代码
在ViewController.m中的代码如下:
复制代码
#import ViewController.h
#import Person.h
#import objc/message.h
/*
runtime: 千万不要随便使用,不得已才使用
消息机制:
1. 装逼
2. 调用已知私有的方法
*/
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
Person *p = objc_msgSend([Person class], @selector(alloc));
p
您可能关注的文档
- 交警手势大全概要.ppt
- IEC61850研讨交流之四_服务影射讲述.ppt
- IEEE_802.11协议与mac层介绍讲述.doc
- 交流仪器的使用概要.ppt
- IE基础知识讲述.ppt
- 交通安全 永记心间概要.ppt
- 交通安全 崔旭琴概要.ppt
- IE培训教材讲述.ppt
- IGBT器件讲述.ppt
- 交通安全ppt概要.ppt
- 国企党委关于2024年度落实全面从严治党主体责任的工作情况报告 (2).docx
- 某中学关于2024年党建工作总结及2025年工作谋划.docx
- 市财政局学习贯彻2024年中央经济工作会议精神的研讨发言材料.docx
- 中学校长2024年述职述廉报告.docx
- 公司党支部书记2024年抓党建工作述职评议报告.docx
- 市高院党组2024年落实全面从严治党主体责任情况的报告.docx
- 某金融部门领导班子2024年度民主生活会对照检查材料.docx
- 市委政法委2024年机关党建工作总结及2025年工作谋划.docx
- 2024年中国共产党入党志愿书.docx
- 镇2024年党建工作总结及2025年工作计划.docx
最近下载
- 高压电缆施工方案.pdf VIP
- ISO 55001-2024 资产管理—资管理体系—要求(中文版-雷泽佳翻译-2024).docx
- 拜厄钢琴基本教程.pdf
- 形考任务三咖啡店无线上网.docx VIP
- 2023-2024苏教版小学数学6六年级(上册)期末检测试卷【7套】 .pdf VIP
- 2023年山东农业工程学院公共课《中国近代史纲要》期末试卷A(有答案).docx VIP
- 八下Unit 4 Why don't you talk to your parents? 单元作业设计.pdf
- DB54T 0424-2024 公共数据 数据开放共享管理规范.pdf
- 2024年人教版二年级(上)期末测试数学试题(含答案).pdf VIP
- 鱼跃制氧机8F-5AW说明书.doc
文档评论(0)