我的Github地址
小码哥《恋上数据结构与算法》笔记
极客时间《iOS开发高手课》笔记
iOS大厂面试高频算法题总结
iOS面试资料汇总
分类
一、使用分类做了哪些事?
- 声明私有方法
- 分解体积庞大的类文件
- 把Framework的私有方法公开
二、分类的特点
三、分类可以添加哪些内容?

四、分类源码解读
关联对象
一、能否给分类添加“成员变量”?
二、关联对象源码
小码哥iOS学习笔记第七天: 关联对象
扩展
一、一般用扩展做什么?
二、分类和扩展的区别?
分类是运行时决议,扩展是编译时决议。
- 分类可以有声明有实现。扩展只以声明的形式存在,多数情况下寄生于宿主类的.m中。
- 可以为系统类添加分类,不能为系统类添加扩展。
代理

- 准确的说是一种软件
设计模式。
- iOS当中以
@protocol形式体现。
- 传递方式一对一。
一、如何规避循环引用?

通知
- 是使用
观察者模式来实现的用于跨层传递消息的机制。
- 传递方式为
一对多。
一、如何实现通知机制?

- 全局字典
Notification_Map,以notificationName为key,以数组Observers_List为value。
Observers_List保存所有声明相同notificationName的对象。
- 对象以
Observer的形式保存,其中包括执行的函数,对象本身等。
KVO
小码哥iOS学习笔记第四天: KVO的本质
KVC
小码哥iOS学习笔记第五天: KVC的本质
属性关键字
- 读写权限
- 原子性
- 引用计数
- retain/strong
- assign/unsafe_unretained
- weak
- copy
一、atomic是否是线程安全的?
atomic修饰的对象,系统会对它的set、get函数进行加锁。
- 如果
atomic修饰一个数组,那么对数组赋值set和获取get,是可以保证线程安全的。
- 如果对数组进行
添加元素和删除元素操作,则不在atomic的操作范围内,是线程不安全的。
小码哥iOS学习笔记第二十三天: atomic
二、assign和weak的区别?
- assign
- 修饰基本数据类型,如
int、bool等。
- 修饰对象类型时,不改变其引用计数。
- 会产生悬垂指针。
- weak
- 不改变背修饰对象的引用计数。
- 所指对象在被释放之后会自动置为
nil。
三、浅拷贝和深拷贝的区别?
小码哥iOS学习笔记第二十五天: OC对象的内存管理
Objective-C语言面试总结
- MRC下如何重写retain修饰变量的setter方法?

- 请简述分类实现原理。
- KVO的实现原理是怎样的?
- 能否为分类添加成员变量?