亲历的iOS面试题

上个星期在V2EX上看到一个酷工作然后挺心动的,俗话说心动不如行动,所以我二话不说当基(机)立断地把简历投了去~
然后马不停蹄地跑去广州面试了~

说实话面试官江哥给我感觉很亲切……完全没有紧张的氛围当然内心还是有点小紧张的
好吧进入正题,主要是有几个问题我感觉自己理解的还是不够透彻,趁着面试暴露出来,现在就加深一下了解。

##block到底是什么东西
按照我的理解,block类似一个函数指针,主要应用场景总结下就是:

  • 当调用其他的功能模块,或者自己写一个通用的功能模块的时候,代替delegate去做回调,这样的好处是不用再去声明回调函数,再去函数里面处理,而是直接把处理结果传进去,直接而优雅。

  • 使用多线程(GCD)的时候,因为GCD的语法是直接用block的,所以这两个好搭档可谓是天衣无缝,举个栗子:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

      //进行异步操作
      dispatch_async(dispatch_get_main_queue(), ^{
          //回到主线程
      });

    });

短短几行代码就可以线程安全地玩转在新创建的线程和主线程之间,这种便利的愉悦是不言而喻的~

因为我自己理解也不是很深~所以还需要慢慢学习

关于语法描述 看这里
还有个很好地资料 看这里

##多线程的几种实现方式

  • NSTheard

  • NSOperation

  • GCD

具体使用栗子:http://www.uml.org.cn/mobiledev/201210262.asp

##页面动画的几种实现方式

这是我的答案……不知道是否正确或者全面
目前我也就第一个用得比较多,CoreAnimation还在慢慢学 ╮(╯▽╰)╭