小码哥iOS底层原理班学习笔记之多线程面试

引言: 编程一份耕耘,一份收获,望大家抱着一科感恩之心对待
如果传送失效:2228114940
手动传送门:https://pan.baidu.com/s/1YVXAd2nkPZZTq2MbVF3rng
自动传送门

KVO 内部实现原理

KVO是基于runtime机制实现的
• 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类
的一个派生类,在这个派生类中重写基类中任何被观察属性的
setter 方法。
派生类在被重写的 setter 方法实现真正的通知机制(Person NSKVONotifying_Person)

是否可以把比较耗时的操作放在 NSNotificationCenter 中

如果在异步线程发的通知,那么可以执行比较耗时的操作;
如果在主线程发的通知,那么就不可以执行比较耗时的操作

Foundation 对象与 Core Foundation 对象 有什么区别

Foundation对象是OC的,Core Foundation对象是C对象 2> 数据类型之间的转换
• ARC:__bridge_retained、__bridge_transfer
• 非ARC: __bridge

不用中间变量,用两种方法交换 A 和 B 的值

A=A+B
B=A-B
A=A-B
或者
A = A^B;
B = A^B;
A = A^B;

简单描述下对单利模式设计的理解?

节省内存资源,一个应用就一个对象。

什么是动态,举例说明

在程序运行过程才执行的操作

runtime 实现的机制是什么,怎么用,一般用 于干嘛. 你还能记得你所使用的相关的头文件或 者某些方法的名称吗?

运行时机制,runtime库里面包含了跟类、成员变量、方法相关的 API,比如获取类里面的所有成员变量,为类动态添 加成员变 量,动态改变类的方法实现,为类动态添加新的方法等 需要导入 runtime,运行时机制,它是一套C语言库实际上我们编写的所有OC代码,最终都是转成了runtime库的东西, 比如类转成了runtime库里面的结构体等数据类型,方法转成了 runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend 函数(所以说OC有个消息发送机制) 因此,可以说runtime是OC的底层实现,是OC的幕后执行者 有了runtime库,能做什么事情呢?runtime库里面包含了跟类、成员 变量、方法相关的API,比如获取类里面的所有成员变量,为类动态 添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 因此,有了runtime,想怎么改就怎么改

是否使用 Core Text 或者 Core Image 等? 如果使用过,请谈谈你使用 Core Text 或者 Core Image 的体验。

CoreText
• 随意修改文本的样式
• 图文混排(纯C语言)
• 国外:Niumb
Core Image(滤镜处理)

  • 能调节图片的各种属性(对比度, 色温, 色差等)

NSNotification 和 KVO 的区别和用法是什 么?什么时候应该使用通知,什么时候应该使用 KVO,它们的实现上有什么区别吗?如果用 protocol 和 delegate(或者 delegate 的 Array) 来实现类似的功能可能吗?如果可能,会有什么潜 在的问题?如果不能,为什么?(虽然 protocol 和 delegate 这种东西面试已经面烂了…)

通知比较灵活(1个通知能被多个对象接收, 1个对象能接收多个通知),代理比较规范,但是代码多(默认是1对1)KVO性能不好(底层会动态产生新的类),只能监听某个对象属性的改 变, 不推荐使用(1个对象的属性能被多个对象监听, 1个 对象能监听 多个对象的其他属性)

Block 内部的实现原理

Objective-C是对C语言的扩展,block的实现是基于指针和函数指针

怎样防止指针的越界使用问题?

必须让指针指向一个有效的内存地址, 1 防止数组越界 2 防止向一块内存中 拷贝过多的内容 3 防止使用空指针 4 防止改变 const 修改的指 针 5 防止改变指向静态存储区的内容 6 防止两次释放一个指针 7 防 止使用野指针.

Whatispurposeofdelegates? 代理 的作用?

代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不 需要获取到那些类的指针。可以减少框架复杂度。 另外一点,代理可以理解为java 中的回调监听机制的一种类似

What are mutable and immutable types in Objective C? obc 中可修改和不可以修改 类型。

可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添 加修改一样。 比如NSArray和NSMutableArray。前者在初始化后的内存控件就是 固定不可变的,后者可以添加等,可以动态申请新的内存空间。

你可能感兴趣的:(iOS)