iOS面试题-每日十道-第五天
一. 用一个属性引用UI控件的时候为什么可以用weak?
controller 是被系统用强指针引用者 只要它存在 那么里面的子控件也就存在 controller强引用着它的view controller又强引用着它的数组对象subviews 数组对象又强引用着它所包含的数组内容 那么创建出来的一个UI控件将其加入subviews的时候 那么就会被一个强指针所引着它
内存的合理使用 当控件我们需要的时候就已经有一个强引用在引用着它 我们就不必再弄一个强指针来强引用它 当我们不需要的时候 weak直接释放掉 用strong的话就还会保留它 这就还占着内存了.
二. UITableView 性能优化的原理
iOS设备内存有限 如果使用UITableView显示非常多的数据 就需要非常多的UI TableViewcell
那么设备的内存就会耗尽 解决该问题就需重用 UITableView 对象
当滚动出列表的时候 部分UITableViewCell 会移出窗口 UITableView会将窗口外的UITableVIewcell 放入一个对象缓存池中
当UITableView 要求dataSource 返回UITableView时 dataSource 会先查看缓存池中是否有未使用的UITableViewCell 有就用新的数据配置这个UITableViewCell 重新使用到窗口 就避免了重新创建对象
三. 什么是抽象类 有什么作用?能实例化吗?
abstract修饰,它只能用来作父类,本身并没有生成实例的能力
它将一类最公有的属性和方法抽取出来抽象类是将类共有的方法抽取出来,声明为抽象方法, 抽象方法只有声明没有具体的实现, 拥有抽象方法的类就是抽象类; 这样新增一种类型时候只需要继承抽象类,实现抽象方法就可以了,降低了实现新类的难度。
抽象方法修饰符 abstract 抽象类不能被实现
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
为什么要有抽象类?
用于类型隐藏在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类。
用于拓展对象的行为功能
这一组任意个可能的具体实现则表现为所有可能的派生类(子类),模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。
四. objc中向一个nil对象发送消息会发生什么?
没事
五. runloop和线程有什么联系?
-
Runloop和线程的关系:一个Runloop对应着一条唯一的线程
-
问题:如何让子线程不死
回答:给这条子线程开启一个Runloop -
Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建
-
Runloop的生命周期:在第一次获取时创建,在线程结束时销
六. 什么是懒汉模式,一般用在哪些地方?
懒加载,指得是需要用到的时候才加载,其好处是节省内存空间,不必一开始就创建所有的变量,用到了就创建一块内存,同时也加快了程序运行速度.一般用于我们只需要创建一次的变量就可以的地方,例如字典转模型的数组,以及控制器的view等,都是懒加载的
七. 常用的延时执行的几种方式?
perform selector
NSTimer
GCD:dispatch_after
八写出你想到的设计模式,并简要描述?
- 单例模式:不管怎么创建,拿到的对象都是同一个
- MVC:MVC把软件系统分为三个部分:Model,View,Controller。MVC有低耦合性、高重用性、可维护性等优点
- 代理模式:代理模式就是实现消息传递的一种机制,委托方有一些任务自己不想完成,但是还需要要实现,则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理,然后代理完成委托方交给的任务.
- 观察者模式:经典观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己或者做出相应的一些动作。比如KVO,通知中心
九. 是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验?
用过
CoreText是用于处理文字和字体的底层技术。Quartz能够直接处理字体(font)和字形(glyphs),将文字渲染到界面上,它是基础库中唯一能够处理字形的模块。因此,CoreText为了排版,需要将显示的文本内容、位置、字体、字形直接传递给Quartz。相比其它UI组件,由于CoreText直接和Quartz来交互,所以它具有高速的排版效果。
coreImage是IOS5中新加入的一个Objective-c的框架,提供了强大高效的图像处理功能,用来对基于像素的图像进行操作与分析. iOS提供了很多强大的滤镜(Filter),其中IOS5中有48种,而到了最新的IOS6 Filter已经增加到了93种之多,并且这一数字会继续增加。这些Filter提供了各种各样的效果,并且还可以通过滤镜链将各种效果的Filter叠加起来,形成强大的自定义效果,如果你对该效果很满意,还可以子类化滤镜
十. POST、GET的区别?
POST:将参数放在请求体中,参数的大小原则上没有限制一般传输的数据包含隐私相关的用POST
GET:将参数附加在URL后面,因为URL长度的限制,所以参数的大小是有限制的,通常不能超过1KB
GET 在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开
纯手动 有地方是个人理解 有误的地方希望大家能给指出 谢谢
如果对您有帮助 希望能给个关注和喜欢~~~
大家面试中遇到的问题 也可以留言分享