V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
alexrezit
V2EX  ›  iDev

分享一些 iOS 面试题的解答

  •  
  •   alexrezit · 2013-05-07 18:13:39 +08:00 · 7058 次点击
    这是一个创建于 4220 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先对那些在 Github 上 star 了我的 repo 的同学表示一下歉意: 对不起很久没更新了, 最近几个月很少写代码, 完全不在状态, 主要是身体健康方面的原因. 如果有人愿意为我的项目贡献代码欢迎来 fork.

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

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

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


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

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

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

    看完Programming in objective-c 2.0的表示上面都有讲^_^,总之不错啦。
    cluries
        17
    cluries  
       2013-05-08 10:21:33 +08:00
    问题的却超级基础,不过我同意楼主说法:国内 90% 的 iOS 程序员答不出这些题...
    开始我也不信,不过从去年10月开始不停的面试人,到现在,我信这个。
    so898
        18
    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
        19
    so898  
       2013-05-08 10:38:22 +08:00
    @wtl 你说的这个我知道的……正因为知道,所以才干出过 [把所有Cell提前做好存到Array里面] 和 [把Cell转换成UIImage存到Array里面] 这种傻事……
    so898
        20
    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;
    }
    pscl
        21
    pscl  
       2013-05-08 11:46:52 +08:00
    __weak NSString *myString = [[NSString alloc] initWithString:@"hello"];
    NSLog(@"%@", myString);

    这个我新建一个工程,输出的是hello,也没报错,怎么回事呢?
    alexrezit
        22
    alexrezit  
    OP
       2013-05-08 12:00:25 +08:00
    @pscl
    抱歉, 手打的抄错了, 已修改.

    @so898
    ARE YOU SERIOUS?
    thwawar
        23
    thwawar  
       2013-05-08 13:06:52 +08:00
    @so898 这样算高度肯定不行,貌似会无限循环?

    研究了好久,还是老老实实计算cell里面的每个子view然后加起来才是正道。
    http://code4app.com/ios/DynamicHeights/5133414a6803fadd63000001

    计算行高真是伤脑筋啊~~~
    ifournight
        24
    ifournight  
       2013-05-08 18:45:44 +08:00
    自学新手飘过, 问题基本都了解, 但是说不到LZ那么清楚明白.
    这些问题虽然基础, 但是不知道的情况下感觉写出来的东西一定很扯淡.
    hilenlai
        25
    hilenlai  
       2013-05-08 20:03:37 +08:00
    @alexrezit 哈哈,LZ现在晚11早6吗?
    alexrezit5
        26
    alexrezit5  
       2013-05-08 20:11:30 +08:00
    @hilenlai
    晚 10 早 7.
    hilenlai
        27
    hilenlai  
       2013-05-08 20:13:53 +08:00
    @alexrezit5 睡9个小时!好幸福
    FromIsland
        28
    FromIsland  
       2013-05-08 23:38:36 +08:00
    copy都没讲对,也好意思放出来,copy分深拷贝浅拷贝,并不是每个都会重新开辟内存
    11
        29
    11  
       2013-05-08 23:41:06 +08:00
    -viewDidLoad 为什么放上面

    为啥呀。。
    alexrezit
        30
    alexrezit  
    OP
       2013-05-09 07:24:44 +08:00 via iPhone
    @FromIsland
    你说的没错, 并非所有 copy 都重新分配内存. 但是否重新分配内存和 shallow or deep 无直接的对应关系.
    zucknet
        31
    zucknet  
       2013-05-09 09:03:20 +08:00
    马克,看了点还不错
    lancy1014
        32
    lancy1014  
       2013-05-14 22:12:04 +08:00
    吐槽那个我笑尿了,2333333~~~~照这么说,我作为都能答上来的是不是应该要他们两倍的工资,唔~~~
    franksin
        33
    franksin  
       2013-07-22 20:21:19 +08:00
    计算高度那个问题,我直接本地缓存了个数组……直接用ID做了索引,效果不错,不过应该不可以用于所有的场景。
    Biscuits
        34
    Biscuits  
       2015-02-25 20:53:58 +08:00
    最近有这个打算,希望有帮助。
    先谢过楼主。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 10:24 · PVG 18:24 · LAX 02:24 · JFK 05:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.