分享一些 iOS 面试题的解答

2013-05-07 18:13:39 +08:00
 alexrezit
先对那些在 Github 上 star 了我的 repo 的同学表示一下歉意: 对不起很久没更新了, 最近几个月很少写代码, 完全不在状态, 主要是身体健康方面的原因. 如果有人愿意为我的项目贡献代码欢迎来 fork.

之前在 CocoaChina 上看到有人吐槽招 iOS 程序员的时候面试一些极其简单的问题都有答不上来的, 于是随便写了篇文章解答了里面的一些问题, 如有错误请多指教.

事先声明一下:
一些比较弱智的 (例如 -viewDidLoad 为什么放上面) 和过于笼统的 (例如 Grand Central Dispatch 的概念) 就不说了.
我写这篇文章是给刚入门还没有什么实际经验的新手看的, 不是让某些骄傲自大眼高手低什么都不懂的傻逼可以背下来然后在面试时蒙混过关. 事实上, 如果这篇文章里的内容你没有 100% 了解, 你根本不应该去找工作, 那纯属是浪费 HR 的时间和你自己的时间.

http://github.com/AlexRezit/Blog/blob/master/SomeBasicQnAsOnCocoaProgramming.md
7088 次点击
所在节点    iDev
34 条回复
qiukun
2013-05-07 18:26:51 +08:00
怒背,不日前去贵司面试。
offspring
2013-05-07 18:31:56 +08:00
好基础 适合入门的面试题
alexrezit5
2013-05-07 18:35:22 +08:00
@offspring
是的. 但是国内 90% 的 iOS 程序员答不出来你信不信?
offspring
2013-05-07 18:50:25 +08:00
@alexrezit5 90%有点夸张吧 50%差不多 主要是有很多培训出来的...
yellowV2ex
2013-05-07 18:58:16 +08:00
不错不错,可以用来面试人。
根据AS经验,这东西就像AS的基础一样,很多人每天不知道用多少次 addEventListener,但却不知道后面两个参数具体是怎么用。
还有就是,因为现在IDE太智能了,导致一些常用方法都不知道怎么拼了,objc更是,方法名长到吐,有些纸上面试的公司,就死活想不出来怎么拼,比如 componentsSepratedByString ,一般打个com就在列表选了,纸上根本写不出来。
offspring
2013-05-07 18:59:39 +08:00
@yellowV2ex 意思到了就行呗 也没必要都记住 不过命名还是有规则的
txx
2013-05-07 19:09:56 +08:00
除了arc 以外勉强合格 = =


lz天天早睡早起的 ,身体还不好啊。让我们这些没事就要通一宵的情何以堪
alexrezit
2013-05-07 19:12:52 +08:00
@txx
在生病之前作息时间还不是跟你们一样... = =
rcgary
2013-05-07 19:58:00 +08:00
请教
@synthesize 在iOS 6 有新的变化吧?
如果不需要同时custom getter & setter,就不用在.m里面声明了。
我记得好像是这样 :)
alexrezit5
2013-05-07 20:54:25 +08:00
@rcgary
我有写, 仔细看.
bupo
2013-05-07 23:01:06 +08:00
写的很好,很基础的东西。
so898
2013-05-08 09:29:14 +08:00
为什么我觉得培训出来的iOS程序员对于这种语法、概念类型的东西应该比实际有作品的程序员要更加熟悉呢?
比如说最后关于UITableView重用的,知道原理固然好,可是知道原理了就能防止UITableView滚动卡顿么?估计只知道原理的打死也不会知道要提前计算好每个Cell的高度才能在某种程度上防止卡顿这种事情吧……
算了,我也不是iOS程序员,路过看看,不多说了
bishop
2013-05-08 09:38:10 +08:00
写的不错,但稍有点简单
wtl
2013-05-08 09:57:43 +08:00
@so898
你看到的界面是由许多view组成 UITableview也不例外
其中所花的工作无非就是每个view绘制自身 以及layout自身的subviews
优化其中的每一步 都会带来性能的提升

原理其实很简单 你说的“提前计算好每个Cell的高度” 有点知其然的味道
可背住了一个 还有其他的呢 碰到新问题呢
alexrezit
2013-05-08 09:59:26 +08:00
@bishop
都说了是基础要不是蛋疼谁会写这个.

@so898
扯淡吧培训出来的更熟悉. 培训出来的你见过么? 我可是见过, retain copy assign 分不清, strong weak 分不清, 还有根本没听说过 getter 和 setter 的, 拼接个字符串不会 format 搞个 mutable string 然后连着 append 好几次.
btw 不知道你说的 "提前" 计算高度是什么意思, 求解释.
Hysteria
2013-05-08 10:01:32 +08:00
@so898 cell的高度是回调形式获取的,在展示的时候才会调用= =

看完Programming in objective-c 2.0的表示上面都有讲^_^,总之不错啦。
cluries
2013-05-08 10:21:33 +08:00
问题的却超级基础,不过我同意楼主说法:国内 90% 的 iOS 程序员答不出这些题...
开始我也不信,不过从去年10月开始不停的面试人,到现在,我信这个。
so898
2013-05-08 10:36:24 +08:00
@alexrezit
[拼接个字符串不会 format 搞个 mutable string 然后连着 append 好几次] ——和我当年干的破事何其的相似……
iOS培训出来的还真没见过,不过见过Java培训出来的,只能说写代码很强悍吧
可能是我把大学教育和培训给弄反了吧……想想看我在大学里面都是学的各种概念,结果出来对于C++这货只能摇头……反倒是自学的Objective-C小有成绩,不过按照楼主你的观点,可以归类为培训出来的了……唉……
关于 [提前] 这个,我也是看别人说的,当年为了解决滑动卡的问题,阅读了无数的教程,最后有人指出在加载不同高度的Cell,UITablviewView ReloadData 之前先对所有要加载的Cell的高度进行计算,然后在heightForRowAtIndexPath 里面输出,这样可以防止由于计算不同高度的Cell导致的卡顿问题……从此我就走上了每次加载Cell都要先开线程计算Cell高度的不归路……
so898
2013-05-08 10:38:22 +08:00
@wtl 你说的这个我知道的……正因为知道,所以才干出过 [把所有Cell提前做好存到Array里面] 和 [把Cell转换成UIImage存到Array里面] 这种傻事……
so898
2013-05-08 10:41:58 +08:00
@Hysteria 当年某大神给我的解决不规则Cell高度的方法……现在看来都是历史的眼泪……

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableView *cell = (UITableView *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/68057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX