面试题目

1:Coredata讲解

Coredata是一个良好的对象图管理工具,那么对象图也就是实体⚠️实体包括两个部分,属性和实体之间的关系.

属性分为很多种

1:Optional 可选/必须 

Transient 瞬态

Indexed索引

Validation 验证

2:AFN ,URLSession,相互关系

NSURLSession类支持三种类型的任务:加载数据,下载和上传。--AFHTTPSessionManager(封装了常用的 HTTP 方法)

1:NSURLSession的创建需要指定模式,代理,和代理的线程队列

2:NSURLSession的提供了丰富的构建task的方法,使用block的话就不会回调代理了

3:NSURLSessionTask提供了开启,中断,取消的操作,状态,发送接收数据的属性,request,response,error属性,没有data属性

使用代理的话,需要把data叠加

AFN

1:包含了对NSURLRequest的封装,NURLResponse的处理,以及连接的创建、管理,https安全性的配置,网络的监测,UIKit的扩展

2:基于NSURLSession的轻量级,用于发送异步请求(get,post,文件上传,下载)的框架

3:AFN3.X版本仅仅基于NSURLSession,AFN2.X主流用法还是继续NSURLConnection。3.X比2.X结构更加简单清晰

3:CADisplayLink CoreGraphics

CADisplayLink是以屏幕刷新频率将内容绘制到屏幕上的定时器。使用的时候,先创建一个CADisplayLink对象,将其添加到一个RunLoop中,并设置target和selector方法,则每次屏幕刷新的时候,selector方法就会自动调用。使用CADisplayLink需要引入QuartzCore框架。与NSTimer的不同--CADisplayLink在正常情况下会在iOS的屏幕刷新结束后调用,精确度比较高。

CoreGraphics也称为Quartz 2D 是UIKit下的主要绘图系统,频繁的用于绘制自定义视图。Core Graphics是高度集成于UIView和其他UIKit部分的。Core Graphics数据结构和函数可以通过前缀CG来识别。

4:死锁的原因和解决方案

在使用GCD的时候,我们会把需要处理的任务放到Block中,然后将任务追加到相应的队列里面,这个队列,叫做Dispatch Queue。然而,存在于两种Dispatch Queue,一种是要等待上一个执行完,再执行下一个的Serial Dispatch Queue,这叫做串行队列;另一种,则是不需要上一个执行完,就能执行下一个的Concurrent Dispatch Queue,叫做并行队列。这两种,均遵循FIFO原则。

http://blog.csdn.net/mr_lucien/article/details/51153473

5 :NSAutoReleasePool使用中drain和release的区别

[pool drain] 和 [pool release] 的区别:

release,在引用计数环境下,由于NSAutoReleasePool是一个不可以被retain的类型,所以release会直接dealloc pool对象。当pool被dealloc的时候,pool向所有在pool中的对象发出一个release的消息,如果一个对象在这个pool中autorelease了多次,pool对这个对象的每一次autorelease都会release。在GC环境下release是一个no-op操作(代表没有操作,是一个占据进行很少的空间但是指出没有操作的计算机指令)。

drain,在引用计数环境下,它的行为和release是一样的。在GC的环境下,这个方法调用objc_collect_if_needed出发GC。

因此,重点是:在GC环境下,release是一个no-op,所以除非你不希望在GC环境下出发GC,你都应该使用drain而不是使用release来释放pool。

6:nsobject 和《nsobject》区别

NSObject*就是 NSObject类型的指针了,它范围较小。

id《nsobject》是指针,它要求它指向的类型要实现NSObject protocol,

iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是一个东东而NSObject类实现了NSOject接口,所以id可以指向NSObject的对象。

你可能感兴趣的:(面试题目)