iOS一些面试题

作者: newbiecoder | 来源:发表于2017-03-29 18:27 被阅读99次

    写了一下午代码本来想去透透气突然来了一个电话,是码市的什么优质开发者调查员,我都忘了什么时候申请过的!人家问了我一些问题,每个都似曾相识,却又说不完整!记得两年多前面试的时候可是背的滚瓜烂熟的,UI界面画久了还真都忘得差不多了。回来整理了一下刚才的问题,就当在复习下,因为以后换工作可能一会用得到。还有一个关于继承的忘了问的什么了。

    weak和assgin的区别

    当一个对象的引用计数为0时,所有指向该对象的weak属性指针会被自动设置为nil,而assign属性不会,如果对象被释放了,此时再进行访问,程序崩溃。

    @property属性关键字详解

    xib/sb为什么用weak

    总结下应该是xib/sb只需要强引用它们所必须持有的第一个对象就行,比如viewcontroller。第一个对象下面的用weak,这样viewcontroller释放后所有的子view也会释放。不用担心内存泄漏。

    UIView属性用weak还是strong?

    Storyboard 使用 Weak Property 声明 Outlet

    runloop的用到了那些model

    这篇写的比较全我就不废话了
    Runloop

    Extension(扩展)和Categories(分类)的区别

    • 类别:在没有原类 .m 文件的基础上,给该类添加方法;
    • 延展:一种特殊形式的类别,主要在一个类的.m文件里声明和实现延展的作用,就是给某类添加私有方法或是私有变量。
    • 两个的区别:
      ① 延展可以添加属性并且它的方法都是波裇实现的。延展可以认为是一个私有的类目。
      ② 类别可以在不知道,不改变原有代码的情况下往里面添加新的方法,只能添加,不能删除修改。
      ③ 并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
      ④ 继承可以增加,修改删除方法,添加属性。
    • Category只能为对象添加方法,却不能添加成员变量。原因:如果可以添加成员变量,添加的成员变量没有办法初始化

    @property中有哪些属性关键字默认的有哪些

    • 原子性(atomic,nonatomic)
    • 读写(readwrite, readonly)
    • 内存管理(assign, strong, weak, unsafe_unretained,copy)
    • getter、setter
    • 默认的有atomic,readwrite,assign,

    OC中调用nil对象的方法

    • nil和C语言的NULL相同,在objc/objc.h中定义。nil表示Objective-C对象的值为空。
      在C语言中,指针的控制用NULL表示。在Objective-C中,nil对象调用任何方法表示什莫
      也不执行,也不会崩溃。
    • 向nil发送消息是完全有效的-- 只是在运行时不会有任何作用。
    • 如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)
    • 如果方法返回值为指针类型,其指针大小为小于或者等 sizeof(void*),float,double,long double
      或者long long 的整型标量,发送给nil的消息将返回0.

    iOS-OC篇 (1~72)

    base64和MD5

    MD5是一种不可逆的消息摘要算法。为计算机安全领域广泛使⽤的一种散列函数,
    用以提供消息的完整性保护。常用语校验。

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法。Base64是一种编码方式。
    注意:base64的主要作用不是加密,而是用来避免“字节”中不能转换成可显示字符的数值。
    MD5和Base64介绍与应用

    最近有面试了两家,继续记录下,好多东西知道用的时候要注意什么,但是直接让回答有时候还真的打答不出来。

    block什么时候在堆上,什么时候在栈上

    block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。使用retain也可以,但是block的retain行为默认是用copy的行为实现的, 因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

    __block和__weak有什么区别?

    __block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
    __weak只能在ARC模式下使用,也只能修饰对象,不能修饰基本数据类型。
    __block对象可以在block中被重新赋值,__weak不可以。

    相比delegate的逻辑散落,blocks更加的优雅简洁,我对block比较深刻的体会就是它简化了回调的过程,可以让代码明显提高可读、可维护性和封装性。block的本质应该说是匿名函数,这是OC中所没有的,解决了方法不能传递问题。

    iOS面试题

    多个网络请求全部完成后再执行

    多个网络请求并发执行、顺序执行
    这个我记得是有这个信号量,面试的哥们说了一句信号量是RAC的东西,一下把我打乱了!GCD中的信号量应该是和RAC的不同。RAC没有过多研究过,有空看看。

    viewcontroller生命周期

    这个是很基础的,一时紧张竟然没说完整!
    iOS - ViewController生命周期

    block和delegate分别在什么时候适合使用

    在IOS的开发中,代理能够完成的事情,使用block都可以实现,因为它们都是函数的回调,并且block的实现方式是更加简单的,因为它不需要制定协议,也不需要定义让自身成为代理;但是有些时候,如果这个对象对外界提供的接口很多,那么使用代理是更加方便的,因为它可以把要实现的函数写在一起,只要成为它的代理就可以同时实现它的这些方法,如果是使用block,需要每次调用block,显得比较乱。
    所以综上,要是接口少,最好用block,要是接口多就用delegate。

    怎么去优化一个viewcontroller

    这个问题,我前段时间去沪江参加过一个iOS的分享,PPTV的任凯前辈分享了一个代码重构的经验,当时忘了总结了,PPT我还留着,大家有兴趣可以看看。找个一个现场小伙伴的总结。
    沪江 iOS 技术沙龙随想

    沪江技术沙龙iOS专场

    git的常用命令merge和rebase

    git merge <branch> # 将branch分支合并到当前分支
    
    git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
     
    git rebase master <branch> # 将master rebase到branch,相当于: git co <branch> && git rebase master && git co master && git merge <branch>
    

    我大部分时间都是单打独斗,所以git的命令除了push别的都没怎么用过!

    set和array的区别,怎么判断set集合里面的对象

    区别set无序,array有序。(我擦我当时竟然忘了这个,面试估计完蛋了)
    set元素具有唯一性,不可重复。array的元素可以重复。

    如果是自定义对象,对象可能有很多属性,可以便利所有的属性来判断是否相同,但是效率肯定低。参考这个iOS中的对象等同性

    关于约束的优先级

    我以前碰到类似的问题好像都是把约束拖出来用代码解决的,这个还真没有注意过!
    在约束的设置里面有一个Priority参数,设置这个数值越大优先级越高,有些类似CSS中z-index属性。

    只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance

    最近几个iOS版本的特性

    开发者需要知道的iOS 8 SDK新特性

    开发者所需要知道的 iOS 9 SDK 新特性

    开发者所需要知道的 iOS 10 SDK 新特性

    iOS 9 适配系列教程
    iOS开发--适配iOS 10以及Xcode 8

    react native 的核心思想

    React-Native的核心思想就是组件化
    React Native学习总结

    相关文章

      网友评论

        本文标题:iOS一些面试题

        本文链接:https://www.haomeiwen.com/subject/vxdyottx.html