iOS经典面试题

1.+load+initialize的区别是什么?

解析:学习一个方法, 主要从两方面入手.第一是,这个方法什么时候调用,第二它的作用是什么.

  • load
    什么时候调用:当程序一启动,就会把所有类加载进内存,只要一个类加载进内存,就会调用这个类的load方法.
    调用次数:只会调用一次
    作用:初始化类的操作
  • initialize
    什么时候调用:当第一次使用这个类或者它的子类就会调用
    调用次数:有可能会调用多次,比如说这个类有一个子类,第一次使用这个子类的时候,会调用2次.
    作用:初始化类的操作

2.runtime实现的机制是什么,有哪些用法,一般用于干嘛?

是什么?

  • runtime是运行时机制.它是一套比较底层的纯C语言API,属于一个语言库,包含了很多底层的C语言API.
  • 平时编写的OC代码,在程序运行中,其实最终都是转成了runtime的C语言代码,runtime算是OC的幕后工作者.

** 有哪些用法?**

  • ①发送消息
  • ②交换方法(系统自带的方法功能不够,给系统自带的方法扩展一些功能,并且保持原有的功能)
  • ③动态创建一个类(比如KVC底层实现)
  • ④动态添加方法(如果一个类方法非常多,加载类到内存的时候也比较耗费资源,需要给每个方法生成映射表,可以使用动态给某个类,添加方法解决)
  • ⑤字典转模型

3.什么时候会发生EXC_BAD_ACCESS异常?

指向僵尸对象(不可用内存)的指针 给野指针发消息会报EXC_BAD_ACCESS错误

4.category和extension的区别

解析
先阐述一下这两个词的意思,再分别说下这两个类的作用使用场景 就OK了

  • category:分类
    1.作用:给一个类扩展一些方法,不能扩展属性
    2.使用场景: 扩展系统的类
  • extension:类目,类扩展,匿名分类
    1.作用:扩充属性和方法声明
    2.使用场景: 扩展自定义类

5.你是怎么理解bounds的

解析
遇到这种不好回答的问题,首先说出它的字面意思

  • 1.内容:每个控件都有自己的内容,一个控件子控件都是相对于内容
  • 2.bounds可以设置控件尺寸
  • 3.bounds描述一块区域,描述的是可视范围在内容的区域
  • 4.修改Bounds的x,y,不会影响当前控件在父控件位置,本质修改的是内容原点

6.UICollectionView使用步骤?

  • 1.初始化布局 流水布局
  • 2.设置数据源
  • 3.注册cell
  • 4.自定义cell

7.简述你对协议的理解?

解析
怎么去使用这个知识点 (这是初学者一般这么回答,low);
为什么要使用协议 (思想),什么时候才需要使用协议 (开发场景)

  • 1.有时候自己不想做的事情,搞一个代理去管理,这时候只要代理遵守了某个协议,就能成为我代理.
  • 2.UIScrollView,监听UIScrollView滚动,这时候需要遵守UIScrollView协议
    注意点:代理一定要记得实现方法.

8.UITabBarController控制器中view的内部结构

  • 它view内部的结构为一个专门存放子控制器View的View,和一个UITabBar条.
    注意:UITabBar的高度为49.

UI基础考点

1.通过代码如何自定义控件? 并且简单的描述下每一个步骤的理由?

  • 1.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
  • 2.在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件,因为init方法内部会调用initWithFrame
  • 3.在layoutSubViews方法中设置子控件的frame(因为在InitWithFrame方法中当前控件尺寸可能没值,所以计算不了子控件的位置和尺寸,而在layoutSubViews方法,能够拿到当前控件的尺寸)
  • 4.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)

2.通过XIB如何自定义控件? 并且简单的描述下每一个步骤的理由?

  • 1.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
  • 2.新建一个xib文件(xib的文件名最好和类名一样)
  • 3.修改最外面那个控件的class为控件类名(只有修改类名,当时候从xib中出来的才是我这种类型的控件)
  • 4.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)

3.用一个属性引用UI控件的时候为什么用weak?

  • 因为UI控件添加到父控件中以后,会有强指针指向这个对象.在搞一个属性引用这个对象,用弱引用就可以.

4.简述UITableView性能优化的原理?

  • 当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,740评论 30 472
  • 我为什么要写这篇文章 自己归纳总结,为校招做准备 方便自己随时查阅,巩固记忆 予人玫瑰手有余香 一、简述iOS中U...
    DeepChafferer阅读 890评论 0 1
  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 1,167评论 0 10
  • 本人ios初学者,为自己学习方便,复制各位大神的学习性文章放在自己简书里,仅作为自己学习方便使用,如果作者疑此行为...
    bu再等阅读 2,124评论 0 7
  • 有没有遇到很想放弃的时候? 就像沙漠中的海市蜃楼,黎明前看不见的启明星,风吹起的泡泡,绚烂而不真实。事实和理智告诉...
    凡绿阅读 194评论 0 0

友情链接更多精彩内容