老胡给的面试题

1.简要描述strong,weak,assign,retain区别以及应用场景

先说assign,assign就是简单的赋值,不做内存层面的改变,简单点说就是两个对象指向同一个内存区,一个地方的变了,其他的地方都会跟着变

retain就是指针拷贝,还是指向同一个内存区,这个对象的retaincount会+1,他的setter方法会将原来的值先release掉,再retain新的值

strong就是强引用,当strong修饰的指针指向的内存发生改变时,因为强引用会持有该对象,指针会指向新的内存

weak弱引用也可以指向那块内存,但是不持有,所以当指针指向的内存发生改变时,weak修饰的指针就会变成空指针

2.写出几个常见的网络请求方式

get:一般只是从服务器获得数据,请求时会提交给服务器一些请求参数,附加在url上,参数之间以&分割

post:多用于给服务器提交数据,提交的数据一般放在body里面,保密性高

3.列出viewController的生命周期以及相关函数,和调用次序

被创建

alloc   创建对象,分配空间

init     初始化

loadview   载入视图

viewdidload   载入完成

viewwillapper   即将出现

viewdidappear  已经出现

移除屏幕

viewwilldisappear   即将移除

viewdiddisappear 已经移除

dealloc   释放

4.写出uiwindow,uiviewcontroller view之间的关系

uiwindow也是uiview的子类,但是一般程序都只会有一个uiwindow,是程序中所有view的根,所有view都必须贴在uiwindow上,或者他的superview的superview直到最底层贴在uiwindow上

uiviewcontroller负责管理uiview的层次结构,响应程序

5.是否了解containerviewcontroller的概念,如果了解请列出常见的containerviewcontroller

概念就是一个viewcontroller显示的一部分属于另外一个viewcontroller

我们常用的UINavigationController,UITabBarController就属于

6.block的起源与oc的写法,自定义一个类型block,描述一下block在arc和mrc下内存存放的位置

block是c的扩充功能

typedef int(^Myblock)(int,int);

静态变量在栈上

全局变量在全局数据区域

没有引用变量的存于堆

arc会自动将block从栈复制到堆上

mrc下需要显示执行copy活着release方法

7.常用的开源库框架

fmdb afnetworking sdwebimage

8.通知消息和代理的的区别

通知时多对多

代理一般是一对一

9.类继承和类扩展区别,类别

继承可以增加,修改,删除方法,嗨可以增加属性

扩展可以增加属性,扩展增加的方法必须实现

类别可以增加属性和方法

10.复述一下uitableview的复用机制

创建一个数组当作cell的复用池,通过计算偏移量来计算cell师傅已经移出屏幕,如果移出,就将cell从table上移除,加到复用池中

同理,判断偏移量,计算出需要一个新的cell显示在屏幕上时,需要先从复用池找看有没有对应的cell,如果有就直接拿出来用,没有,就实例化新的cell

11.复述一下arc和mrc下的区别,以及oc里面混编需要做的修改

arc时自动内存管理

mrc下需要自己释放自己申请的内存

混编需要加上-fno-objc-arc标记

12.如果要你自己写一个mjrefresh,写一下思路,如果能用代码实现可以用代码实现

13.说一下你对runtime的理解

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

14.kvc和kvo的理解

KVO 可以观察某个对象的变量变化过程,KVC 是 满足被观察的编码规范。 

15.sdwebimage的原理及作用

先显示placeholder的图片,然后再缓存区寻找,如果有,就显示,没有,就创建一个新线程,去本地硬盘找,找到了,就存到缓存,并显示,没有,则开始下载,下载结束,显示图片并缓存到缓存和硬盘

posted @ 2015-12-14 19:04  闵老师  阅读(222)  评论(0编辑  收藏  举报