A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xqlyn123 中级黑马   /  2015-11-26 22:49  /  1998 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

这些 iOS 面试基础题目,你都深入了解吗?






唐巧前辈说这些都是 iOS 的基础问题,应该对此深入的了解。当初看到时,大部分回答不上来,因为平时没有好好思考整理过。这里大部分的概念大多会在学习 OC 的过程中遇到过,但还是得经过写代码才能有更深的理解。反正我当初看那些设计模式是云里雾里,每个字都认识,就是不知道说的什么。即使现在,有些东西,我也不是很理解。
Objective-C 底层
Objective-C runtime library:Objective-C 的对象模型,Block 的底层实现结构,消息发送,消息转发,category,method 实现,class load。
runtime 我在平时很少涉及到,没有系统学习过,而且很多次看了不久就忘了,所以这里给出一些不错的文章的链接供参考。这几个问题在《iOS 7 Programming Pushing the Limits》都有过深入的解读(我有电子版,是盗版,这里给出这本书在 Github 的地址,工作后我会把去年看过的盗版书全部补偿买回,没有 iOS 8 的版本,不知道是不是由于盗版太多导致的)。另外,唐巧前辈撰文讨论过前两者:
1. 《Objective-C 对象模型及应用》
唐巧在后记中也提到了 iOS 64-bit 带来的变化:

那么就来看看 Session 404 Advanced in Objective-C ,从36分起讲相关的东西,喔,看不懂,那还是看看这个吧,在《iOS 7 Programming Pushing the Limits》的 Further Reading: objc_explain_Non-pointer_isa 部分谈论了这个问题。
2. 《谈 Objective-C Block 的实现
内容非常翔实,特别是关于 Block 类型的部分,强烈建议做下文章开头提到的测试:Objective-C Blocks Quiz
3. 消息发送和消息转发
消息发送比较好理解,先了解下 runtime 吧,可以查看官方文档《Objective-C Runtime Guide》。之前学习其他语言的时候还没有关注过调用函数的背后发生了什么,在 Objective-C 中,在对象上调用方法称为发送消息,比如[receiver message];这行代码,编译的时候编译器将之转换为对 底层 C 函数objc_msgSend 的调用:objc_msgSend(receiver, selector);在运行时,调用哪个方法则完全由 runtime 决定,甚至在运行时可以替换调用的方法,这是 Objective-C 被称为动态语言的根本原因。对于消息转发,说实话我现在还不知道这个的应用场景,看到的大部分博客都是说消息转发给了你补救措施来应对没有没有实现的方法防止 Crash 或者实现类似多继承的机制,我有个疑惑,干嘛不实现那个方法,而要在代价很大的转发机制里处理呢。在《Effective Objective-C 2.0》一书第 12 条 tip 中用 @dynamic 演示了实现动态方法解析的例子来说明消息转发的意义,老实说,我还是没有理解这个的意义。这里有个对官方文档的中文翻译和一些注解


13 个回复

倒序浏览
bay 中级黑马 2015-11-26 23:37:07
沙发
流弊
回复 使用道具 举报
写的很详细,我现在在学c,先将这么好的东西收藏啦,以后需要时拿出来看,谢谢大神分享!!!
回复 使用道具 举报
谢谢大神分享
回复 使用道具 举报
比较高深的了
回复 使用道具 举报
看到面试的内容一点不会啊,紧张
回复 使用道具 举报
谢谢大神分享
回复 使用道具 举报
晕了晕了
回复 使用道具 举报
liury 中级黑马 2015-11-27 13:46:16
9#
看了OC加强后,楼主的问题还是不懂,要学的还有好多。
回复 使用道具 举报
cxk 中级黑马 2015-11-27 16:30:27
10#
我也是在学习c的 ,看来学的还有很多呢
回复 使用道具 举报
刘耀宗 来自手机 中级黑马 2015-11-27 17:30:21
11#
谢谢分享了
回复 使用道具 举报
怎么好像看不懂啊
回复 使用道具 举报
暂时用不到。。不过收藏了再说。。
回复 使用道具 举报
不错···           
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马