整理一些重点和面试问到几率比较大的题目给小伙伴
对您有帮助或者您喜欢的话 希望能点个赞或者添加一下关注
一. CALayer和UIView的区别联系
- 1 UIView是UIKIt的只能在iOS使用, CALayer是QuartzCore的 iOS和mac os通用
- 2 CALayer比UIView更加轻量级,但是可以实现同样的效果
- 3 UIView的CALayer类似UIView的子View树形结构
- 4 UIView比CALayer多了一个事件处理功能,也就是说UIView能处理用户触摸
- 5 UIView有个重要的属性layer,可以返回它的主CALayer实例.CALayer *layer = myView.layer
- 6 坐标系统: CALayer的坐标系统比UIView多了一个anchorPoint属性
- 7 UIView是iOS系统中界面的基本元素,所有的界面元素都是继承自它.它本身完全是由CoreAnimation来实现的.它真正的绘图部分,是由一个CALayer类来管理的.UIView本身更像是一个CALayer的管理权,访问它的跟绘图和跟坐标有关的属性,如frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性.
layer可以设置圆角显示 cornerRadius 也可以设置阴影 shadowColor 但是如果layer🌲中某个layer设置了圆角 🌲中所有layer的阴影效果将都不显示.因此要死设置有圆角还要阴影,可以做两个UIView重叠,一个layer显示圆角一个layer显示阴影 - 8 渲染 当更新层 改变不能立即显示在屏幕上.当所有的层都准备好时,可以调用setNeedsDisplay方法来重绘显示.
- 9 变换 要在一个层中添加一个3D或仿射变换,可以分别设置层的transform或者affineTransform属性
- 10 变形Quartz Core的渲染能力 使二维图像可以被自由的操纵,就像是三维的.图像可以在一个三维坐标系中以任意的角度被旋转 缩放 和倾斜.CATransform3D的一套方法提供了一些魔术般的效果
二. 简述同步和异步
同步:串行的执行任务 异步:并行的执行任务.同步函数不具备开启线程的能力,而异步函数具备
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就得到返回值了.也就是 由调用者主动等待这个调用结果
而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果.换句话说就是当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用.
三. 多线程安全怎么控制?
用互斥锁,队列组,栅栏函数,依赖
四. 简要说明什么时候使用继承,什么时候使用类别
在OC中,一个类继承另一个类,就是继承了父类所有的属性和方法,并且可以扩充自己的属性:而类别是在不改变原有类的基础上进行方法扩充;
因此,根据开发需求,如果这个类需要扩充属性,或者需要重写系统的类的某些方法,用继承;如果只是对一个类扩充接口和模块,使用类别更加方便.
五. 简述苹果的安全机制
- 数字签名机制:在iOS中运行的App必须 拥有自己的数字签名,而数字签名来与开发者的数字证书;开发者需要加入"iOS开发者计划"才能获取证书 而且其开发的App还要经过严格的审查才能在AppStore上架,保证了App的安全;杜绝了第三方和未签名App的运行;
- 沙盒保护机制:这种机制使得设备内的各个App之间无法直接进行交流,只能通过iOS来进行数据传递;虽然降低了系统的扩展性但是却保证了安全性;
- 不要使用越狱,否则苹果的安全机制就功亏一篑;
- 只从AppStore获取App;
- 第一次连接计算机,不要随意点"信任";
- 不要随意给某个App设置隐私读取权限;
六 关键字const有什么含意?修饰类呢?static的作用,用于类呢?还有extern c的作用?
当使用 const修饰基数数据类型变量时,该变量就变为常量,进入静态区
-
当使用const修饰指针类型变量时:
- 当使用const在指针类型两边,那么该指针变量指向的内存空间的内容就不能改变了,但指针的指向可以改变.
如果const在变量的左边,那么该指针的指向不能改变了,而指向内存空间的内容可以改变
当使用const修饰符时,const NSSting *str,相当于修饰该对象,表示对象是不可更改的.
static修饰变量,表示这个内部全局变量,只能在本文件中访问.系统会将该变量放进静态区,它的生命周期被延长到了程序结束
static修饰类, 表示这个内部的方法, 只能在本文件中访问.
extern c表示声明了一外部变量, 多个外部变量如果同名,实际指向的是同一块存储空间.
七. 类工厂方法是什么?
- 类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理.这些方法的形式是+(type)className..其中className不包括任何前缀. 工厂方法可能不仅仅为了方便使用,它们不但可以将分配和初始化合在一起,还可以为初始化过程提供对象的分配信息.类工厂方法的另一个目的是使类提供单间实例.
八 UIView从出现到销毁的过程?
-> loadView
-> viewDidLoad
-> viewWillAppear
-> viewWillLayoutSubviews
-> viewDidLayoutSubviews
-> viewDidAppear
-> viewWillDisappear
-> viewDidDisappear
九. 什么情况下回发生内存泄漏和内存溢出?
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是就产生溢出.
内存泄漏就是指你向系统申请分配内存进行使用,可以说使用完后没有惊喜释放,结果这块内存也无法分配给其他程序,称之为内存泄漏
内存泄漏的累计危害非常大 最后会导致内存溢出 程序闪退;
内存泄漏分为四大类;
- 常发生内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏.
- 偶发生内存泄漏.发生内存泄漏的代码只有在某些特定的坏境或者操作过程下才会发生;
- 一次性内存泄漏.发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏;
- 隐式内存泄漏 程序在运行的过程中不停的分配内存, 但是直到结束的时候才释放内存,对于运行周期很长的服务器,不及时释放会耗尽内存;
十 说说响应者链条?
响应者链条是一条由UIResponder的子类组成的链条,它们都能够响应时间,由事件的最佳相应者起,如果它是控制器的view的话,它的上一级响应者就是这个控制器,否则就是它的父控件;控制器的上一级响应者是它父控制器的view,最终一直到window.
纯手打 有错误或者不对的地方希望大家能给指出
喜欢的小伙伴希望能给个赞 或者添加个关注