iOS 面试题

1、CALayer有哪些子类?用途? 

2、有哪些常见的 Crash 场景?

3、@protocol 和 category 中如何使用 @property 

4、什么是 method swizzling?

5、如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

6、iOS签名机制大概是怎样的?

答案:

1、CALayer有哪些子类?用途? 

CAShaperLayer

CAGradientLayer: 颜色过渡

CAEmitteryLayer :粒子效果

CATransformLayer:给图层加景深效果,构造一个层级分明的3D结构。

CAReplicatorLayer:图层复制

CAScrollLayer

CATiledLayer:为节省内存渲染开销提供了途径

CATextLayer:

CAEAGLLayer:

AVPlayerLayer: 播放视频 

2、有哪些常见的 Crash 场景?

数组越界

访问了僵尸对象。已经被释放掉的对象

访问野指针. EXC_BAD_ACCESS.

访问了不存在的方法. unrecognized selector 

多线程并发操作

在定时器下一次回调前将定时器释放

3、@protocol 和 category 中如何使用 @property

 objc_setAssociatedObject/ objc_setAssociatedObject

4、什么是 method swizzling?

简单说就是进行方法交换

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的

每个类都有一个方法列表,存放着方法的名字和方法实现的映射关系,selector的本质其实就是方法名,IMP有点类似函数指针,指向具体的Method实现,通过selector就可以找到对应的IMP。

selector --> 对应的IMP

交换方法的几种实现方式

利用 method_exchangeImplementations 交换两个方法的实现

利用 class_replaceMethod 替换方法的实现

利用 method_setImplementation 来直接设置某个方法的IMP。

5、如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

6、iOS签名机制大概是怎样的? 

 5、如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

若想令自己所写的对象具有拷贝功能,则需实现NSCopying协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现NSCopyiog与NSMutableCopying协议。

6、

https://www.jianshu.com/p/ad29445eb91c

原文地址:https://www.cnblogs.com/developer-qin/p/9454582.html