- 什么是KVO 和KVC,它们的区别,举一个你用过的例子?
KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。
KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。
2 代理的作用?
代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度 另外一点 代理可以理解为java中的 回调监听
3 通知和代理的不同之处?
代理通常用于一对一的关系,通知可以是一对多或者一对一 或者一对无的关系
代理的receive可以把结果返回给sender通知的sender只负责把消息发送出去不需要返回结果
4 在iPhone应用中如何保存数据?
1).通过web服务,保存在服务器上
2).通过NSCoder固化机制,将对象保存在文件中
3).通过SQlite或CoreData保存在文件数据库中
5 谈谈对block的理解?
block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的。
6 在项目中什么时候使用GCD,什么时候选择NSOperation?
项目中使用NSOPeration的优点是 nsoperation是对线程的高度抽离,在项目中使用他,会使项目的程序结构更好,子类化nsoperation的设计思路是具有面向对象的优点(复用,封装)使得实现是多线程支持,而接口简单,一般使用在复杂的项目中较多
项目中使用GCD的优点是GCD本身非常简单,易用,对于不复杂的多线程操作,会节省代码量,而block参数的使用会是代码更为易读,一般在简单项目中使用较多
7 深拷贝和浅拷贝区别是什么?
简单来说就是 在有指针的情况下 浅拷贝只是增加了一个指针指向存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存
8 C和Object-C如何混用
Object-C中的类别和类扩展的区别category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category
9 Object-C堆和栈的区别
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
10
下拉刷新,上拉加载具体实现(不用框架自己实现)?
11 图片缓存的具体实现(不用框架自己实现)?
12 图片存储的位置?
图片存储再沙盒
13 百度的SDK,自己是怎么用的?
注册成为开发者 通过API文档使用喽
14 HTTP连接Post/Get的区别和使用的场景
D1).GET 方法
GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见;
GET 方法提交的数据大小有限
GET 方法不可以设置书签
2).POST 方法
POST 方法提交数据安全,数据置于消息主体内,客户端不可见
POST 方法提交的数据大小没有限制
POST 方法可以设置书签
15 NSURLConnection与NSURLRequest的区别和使用的场景
NSURLConnection主要用于网络访问,其中+ sendSynchronousRequest:returningResponse:error:是同步访问数据,即当前线程会阻塞,并等待request的返回的response,而– initWithRequest:delegate:使用的是异步加载,当其完成网络访问后,会通过delegate回到主线程,并其委托的对象。
16简述一下生命周期
程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该UIApplication对象监控应用程序生命周期全过程 c.每一个IOS应用程序都要为其UIApplication对象指定一个代理对象,并由该代理对象处理UIApplication对象监测到的应用程序生命周期事件
下面是没有答案的面试题整理:
1. 写一个宏,可以根据RGB值产生颜色对象
2. 例举你用过的大型SDK
3.用c语言写出插入排序或者其他排序
4. 写一个block的声明和调用
5.写一个封装
6.在项目中用过加密吗?在哪个功能点用到什么加密?
7. Quartz2D有了解吗?怎么用代码画一个弧
8.用过多线程吗?说一下GCD队列组
9.
if(self=[super init]){
}
return self;
这段代码的作用是什么
10.写出UITextField的继承一直到NSObject
11.用过c或者c++与oc的混编吗
12.简述TCP与UDP
13.用代码描述一个视图控制器的生命周期
14.怎么实现ScrollView的复用?
15.你最擅长的项目功能模块是什么,比如即时通讯方面 或者 支付、订单等等