黑马程序员技术交流社区
标题:
oc面试题
[打印本页]
作者:
xqlyn123
时间:
2015-11-26 22:49
标题:
oc面试题
这些 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 演示了实现动态方法解析的例子来说明消息转发的意义,老实说,我还是没有理解这个的意义。这里有个对官方文档的
中文翻译和一些注解
。
作者:
bay
时间:
2015-11-26 23:37
流弊
作者:
alen2015
时间:
2015-11-26 23:44
写的很详细,我现在在学c,先将这么好的东西收藏啦,以后需要时拿出来看,谢谢大神分享!!!
作者:
核酸的双链
时间:
2015-11-27 00:14
谢谢大神分享
作者:
lujia1010
时间:
2015-11-27 09:35
比较高深的了
作者:
cherrycool
时间:
2015-11-27 09:52
看到面试的内容一点不会啊,紧张
作者:
唐阿丽
时间:
2015-11-27 09:54
谢谢大神分享
作者:
爱尘iPhone
时间:
2015-11-27 11:22
晕了晕了
作者:
liury
时间:
2015-11-27 13:46
看了OC加强后,楼主的问题还是不懂,要学的还有好多。
作者:
cxk
时间:
2015-11-27 16:30
我也是在学习c的 ,看来学的还有很多呢
作者:
刘耀宗
时间:
2015-11-27 17:30
谢谢分享了
作者:
cbl16888
时间:
2015-11-27 21:47
怎么好像看不懂啊
作者:
106105076
时间:
2015-11-27 22:29
暂时用不到。。不过收藏了再说。。
作者:
liuch111
时间:
2015-11-27 22:35
不错···
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2