├── 其他问题
├── 13.第十三题.md
├── 20.第二十题.md
├── 12.第十二题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 24.第二十四题.md
├── 25.第二十五题.md
├── .DS_Store
├── 16.第十六题.md
├── 14.第十四题.md
├── 2.第二题.md
├── 3.第三题.md
├── 15.第十五题.md
├── 1.第一题.md
└── 4.第四题.md
├── 图像处理
├── 1.第一题.md
├── 2.第二题.md
├── .DS_Store
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── 性能优化
├── 2.第二题.md
├── 7.第七题.md
├── 3.第三题.md
├── 4.第四题.md
├── 8.第八题.md
├── 11.第十一题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 10.第十题.md
├── 5.第五题.md
└── 6.第六题.md
├── 扩展问题
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── 网络
├── 1.第一题.md
├── 2.第二题.md
├── 12.第十二题.md
├── 16.第十六题.md
├── 14.第十四题.md
├── 17.第十七题.md
├── 13.第十三题.md
├── 15.第十五题.md
├── 22.第二十二题.md
├── 9.第九题.md
├── 7.第七题.md
├── 21.第二十一题.md
├── 4.第四题.md
├── 10.第十题.md
├── 20.第二十题.md
├── 3.第三题.md
├── 6.第六题.md
├── 24.第二十四题.md
├── 28.第二十八题.md
├── 29.第二十九题.md
├── 30.第三十题.md
├── 31.第三十一题.md
├── 11.第十一题.md
├── 26.第二十六题.md
├── 18.第十八题.md
├── 25.第二十五题.md
├── 8.第八题.md
├── 27.第二十七题.md
└── 23.第二十三题.md
├── 蓝牙
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
└── 9.第九题.md
├── 视频处理
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── 计算题
├── 1.第一题.md
├── 4.第四题.md
├── 7.第七题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 3.第三题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
└── 2.第二题.md
├── 调试技巧
├── 2.第二题.md
├── 1.第一题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 7.第七题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
└── 6.第六题.md
├── 音频处理
├── 1.第一题.md
├── 2.第二题.md
├── .DS_Store
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
└── 13.第十三题.md
├── 项目架构
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── ARKit
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── Core ML
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
└── 9.第九题.md
├── Runloop
├── 5.第五题.md
├── 18.第十八题.md
├── 4.第四题.md
├── 9.第九题.md
├── 15.第十五题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 14.第十四题.md
├── 16.第十六题.md
├── 1.第一题.md
├── 12.第十二题.md
├── 2.第二题.md
├── 17.第十七题.md
├── 8.第八题.md
├── 3.第三题.md
├── 7.第七题.md
├── 6.第六题.md
├── 10.第十题.md
└── 13.第十三题.md
├── UIKit
├── 3.第三题.md
├── 4.第四题.md
├── 6.第六题.md
├── 9.第九题.md
├── 12.第十二题.md
├── 2.第二题.md
├── 1.第一题.md
├── 5.第五题.md
├── 10.第十题.md
└── 7.第七题.md
├── 开放性问题
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── 数据安全及加密
├── 2.第二题.md
├── 7.第七题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 8.第八题.md
├── 9.第九题.md
└── 6.第六题.md
├── 源代码阅读
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── 算法集合
├── 二维数组查找.md
├── 排序算法.md
├── 10.第十题.md
├── .DS_Store
├── 8.第八题.md
├── 1.第一题.md
├── 冒泡排序.md
└── 9.第九题.md
├── 逆向及安全
├── 1.第一题.md
├── 2.第二题.md
├── 7.第七题.md
├── 3.第三题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 10.第十题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
├── Foundation
├── 13.第十三题md.md
├── 5.第五题.md
├── 8.第八题.md
├── 2.第二题.md
├── 16.第十六题.md
├── 1.第一题.md
├── 7.第七题.md
├── 10.第十题.md
├── 9.第九题.md
├── 4.第四题.md
├── 14.第十四题.md
├── 12.第十二题.md
├── 15.第十五题.md
├── 6.第六题.md
├── 3.第三题.md
└── 11.第十一题.md
├── 多线程
├── 1.第一题.md
├── 4.第四题.md
├── 5.第五题.md
├── 15.第十五题.md
├── 19.第十九题.md
├── 3.第三题.md
├── 11.第十一题.md
├── 17.第十七题.md
├── 14.第十四题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 18.第十八题.md
├── 12.第十二题.md
├── 10.第十题.md
├── 16.第十六题.md
├── 9.第九题.md
├── 7.第七题.md
├── 20.第二十题.md
├── 6.第六题.md
└── 21.第二十一题.md
├── Runtime
├── 9.第九题.md
├── 18.第十八题.md
├── 3.第三题.md
├── 19.第十九题.md
├── .DS_Store
├── 17.第十七题.md
├── 6.第六题.md
├── 23.第二十三题.md
├── 25.第二十五题.md
├── 25.第二十五题的副本 3.md
├── 25.第二十五题的副本 4.md
├── 25.第二十五题的副本.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 20.第二十题.md
├── 1.第一题.md
├── 24.第二十四题.md
├── 7.第七题.md
├── 8.第八题.md
├── 11.第十一题.md
├── 22.第二十二题.md
├── 21.第二十一题.md
├── 2.第二题.md
├── 10.第十题.md
├── 26.第二十六题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 5.第五题.md
├── 12.第十二题.md
└── 4.第四题.md
├── 消息传递的方式
├── 17.第十七题.md
├── 9.第九题.md
├── 2.第二题.md
├── 1.第一题.md
├── 14.第十四题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 10.第十题.md
├── 13.第十三题.md
├── 5.第五题.md
├── 8.第八题.md
├── 12.第十二题.md
├── 11.第十一题.md
├── 15.第十五题.md
├── 4.第四题.md
├── 6.第六题.md
├── 7.第七题.md
├── 3.第三题.md
└── 16.第十六题.md
├── 内存管理
├── 11.第十一题.md
├── 8.第八题.md
├── .DS_Store
├── 13.第十三题.md
├── 18.第十八题.md
├── 3.第三题.md
├── 19.第十九题.md
├── 14.第十四题.md
├── 4.第四题.md
├── 6.第六题.md
├── 9.第九题.md
├── 7.第七题.md
├── 15.第十五题.md
├── 2.第二题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 5.第五题.md
├── 12.第十二题.md
├── 24.第二十四题.md
├── 1.第一题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 23.第二十三题.md
└── 10.第十题.md
├── 设计模式
├── .DS_Store
├── DesignPatten
│ ├── .DS_Store
│ ├── DesignPatten.xcodeproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── Bridge
│ │ ├── ObjectA1.h
│ │ ├── ObjectA2.h
│ │ ├── ObjectB1.h
│ │ ├── ObjectB2.h
│ │ ├── BridgeDemo.h
│ │ ├── BaseObjectB.h
│ │ ├── ObjectB1.m
│ │ ├── ObjectB2.m
│ │ ├── BaseObjectB.m
│ │ ├── ObjectA2.m
│ │ ├── ObjectA1.m
│ │ ├── BaseObjectA.h
│ │ └── BaseObjectA.m
│ ├── Adapter
│ │ ├── Target.h
│ │ ├── Target.m
│ │ ├── CoolTarget.h
│ │ └── CoolTarget.m
│ ├── SingleInstance
│ │ ├── Mooc.h
│ │ └── Mooc.m
│ ├── DesignPatten
│ │ ├── ViewController.h
│ │ ├── AppDelegate.h
│ │ ├── main.m
│ │ └── ViewController.m
│ ├── Command
│ │ ├── Command.h
│ │ ├── CommandManager.h
│ │ └── Command.m
│ ├── Responder
│ │ └── BusinessObject.h
│ └── DesignPattenUITests
│ │ └── Info.plist
├── 4.第四题.md
├── 3.第三题.md
└── 1.第一题.md
├── WebView
├── .DS_Store
├── 2.第二题.md
└── 1.第一题.md
├── 代码管理
├── 3.3-8.md
├── 1.1-2.md
├── 3.3-3.md
├── 3.3-1.md
├── 3.3-2.md
├── 3.3-4.md
├── 3.3-5.md
├── 3.3-6.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 1.1-3.md
├── 1.1-1.md
├── 3.3-7.md
├── 1.1-4.md
└── 1.1-5.md
├── 数据结构
├── 链表.md
├── 1.1-2.md
├── 5.第五题.md
├── 6.第六题.md
├── 字典.md
├── 数组.md
├── 1.1-3.md
└── 1.1-4.md
├── 数据存储
├── 7.第七题.md
├── 10.第十题.md
├── 3.第三题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
└── 23.第二十三题.md
└── Animation
├── 7.第七题.md
├── 10.第十题.md
├── 4.第四题.md
├── 5.第五题.md
├── 6.第六题.md
├── 8.第八题.md
├── 9.第九题.md
├── 11.第十一题.md
├── 12.第十二题.md
├── 13.第十三题.md
├── 14.第十四题.md
├── 15.第十五题.md
├── 16.第十六题.md
├── 17.第十七题.md
├── 18.第十八题.md
├── 19.第十九题.md
├── 20.第二十题.md
├── 21.第二十一题.md
├── 22.第二十二题.md
├── 23.第二十三题.md
├── 1.第一题.md
├── 2.第二题.md
└── 3.第三题.md
/其他问题/13.第十三题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/其他问题/20.第二十题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/图像处理/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/图像处理/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/性能优化/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/扩展问题/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/扩展问题/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/网络/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/网络/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/蓝牙/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/蓝牙/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/视频处理/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/视频处理/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/计算题/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/调试技巧/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/音频处理/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/音频处理/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/项目架构/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/项目架构/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ARKit/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ARKit/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Core ML/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Core ML/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Runloop/5.第五题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/UIKit/3.第三题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/12.第十二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/17.第十七题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/18.第十八题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/19.第十九题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/21.第二十一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/22.第二十二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/23.第二十三题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/24.第二十四题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/25.第二十五题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/开放性问题/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/开放性问题/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/数据安全及加密/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/源代码阅读/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/算法集合/二维数组查找.md:
--------------------------------------------------------------------------------
1 | #### 二维数组查找
2 |
3 |
--------------------------------------------------------------------------------
/逆向及安全/1.第一题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/逆向及安全/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Foundation/13.第十三题md.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Foundation/5.第五题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/多线程/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.`NSThread`相关知识
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Runloop/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ## 18.如何检测 `App` 运行过程中是否卡顿?
2 |
3 |
4 |
--------------------------------------------------------------------------------
/调试技巧/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## LLDB 调试命令
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/9.第九题.md:
--------------------------------------------------------------------------------
1 | 9.如何实现动态添加方法和属性?
2 |
3 | 直接查 API 即可
4 |
5 |
6 |
--------------------------------------------------------------------------------
/多线程/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.如何实现线性编程?
2 |
3 | 信号量、栅栏、Dispatch_group
4 |
5 |
--------------------------------------------------------------------------------
/多线程/5.第五题.md:
--------------------------------------------------------------------------------
1 | ## 5.说一下 `GCD` 并发队列实现机制?
2 |
3 |
4 | 利用的时间片轮转
5 |
6 |
7 |
--------------------------------------------------------------------------------
/算法集合/排序算法.md:
--------------------------------------------------------------------------------
1 | #### 排序算法
2 |
3 | 1.冒泡排序
4 |
5 | 2.选择排序
6 |
7 | 3.快速排序
8 |
9 |
--------------------------------------------------------------------------------
/多线程/15.第十五题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 14.如何确保线程安全?
4 |
5 | * 采用 `串行队列`。
6 | * 加上 `同步锁`。
7 |
8 |
--------------------------------------------------------------------------------
/多线程/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ## 19.如何自定义 `NSOperation` ?
2 |
3 |
4 | 需要重写其 `main` 方法
5 |
6 |
7 |
--------------------------------------------------------------------------------
/多线程/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.`NSOperation` 和 `NSOperationQueue`相关知识?
2 |
3 | (最大并发数、线程依赖)
4 |
5 |
--------------------------------------------------------------------------------
/算法集合/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 10.在一个数组中找出前四个最大的数字。
2 |
3 |
4 | 其实思路很简单,排好序,直接取最后四个即可
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Foundation/8.第八题.md:
--------------------------------------------------------------------------------
1 | ## 8.说一下对 `Super` 关键字的理解。
2 |
3 |
4 | 这是一个编译器的特性,优先到父类中寻找方法。
5 |
6 |
--------------------------------------------------------------------------------
/Runtime/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ## 18.如何运用 `Runtime` 进行模型的归解档
2 |
3 | `Runtime` 遍历 `ivar_list`。
4 |
5 |
--------------------------------------------------------------------------------
/Runtime/3.第三题.md:
--------------------------------------------------------------------------------
1 | 3.元类对象的数据结构?
2 |
3 | `元类对象` 和 `类对象` 数据结构是一致的的 ,参见第二题。
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/消息传递的方式/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.说一下什么是`Block`?
2 |
3 |
4 | `Block` 是将函数及其执行上下文封装起来的对象。
5 |
6 |
--------------------------------------------------------------------------------
/网络/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`大文件下载` 的功能有什么注意点?
2 |
3 | 注意要边下载数据边写入文件,不然会造成占用内存空间过大
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Runtime/19.第十九题.md:
--------------------------------------------------------------------------------
1 | 19.在 `Obj-C` 中为什么叫发消息而不叫函数调用?
2 |
3 | 结合 `objc_msgsend` 讲一下,接收消息的过程。
4 |
5 |
--------------------------------------------------------------------------------
/UIKit/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.`LoadView`方法了解吗?
2 |
3 | 自定义控制器的 `View`。可以在这个方法中做一些个性化的设置
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/消息传递的方式/9.第九题.md:
--------------------------------------------------------------------------------
1 | ## 9.`Delegate`通常用什么关键字修饰?为什么?
2 |
3 | 通常是用 `weak` 来修饰,目的是为了避免循环引用。
4 |
5 |
--------------------------------------------------------------------------------
/网络/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ## 16.`NSUrlProtocol`用过吗?用在什么地方了?
2 |
3 |
4 | 可以拦截全局的网络请求。
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Foundation/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.如何实现一个线程安全的 `NSMutableArray`?
2 |
3 | 主要是多线程读写时,需要加锁。
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/内存管理/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ## 11.`ARC` 在编译时做了哪些工作
2 |
3 | 根据代码执行的上下文语境,在适当的位置插入 `retain`,`release`
4 |
5 |
6 |
--------------------------------------------------------------------------------
/内存管理/8.第八题.md:
--------------------------------------------------------------------------------
1 | ## 8.为什么已经有了 `ARC` ,但还是需要 `@AutoreleasePool` 的存在?
2 |
3 | 避免内存峰值,及时释放不需要的内存空间
4 |
5 |
--------------------------------------------------------------------------------
/其他问题/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/其他问题/.DS_Store
--------------------------------------------------------------------------------
/内存管理/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/内存管理/.DS_Store
--------------------------------------------------------------------------------
/图像处理/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/图像处理/.DS_Store
--------------------------------------------------------------------------------
/源代码阅读/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.SDWebImage
2 |
3 | 有一篇[文章](https://www.jianshu.com/p/06f0265c22eb)写的很好,推荐大家看看。
4 |
5 |
--------------------------------------------------------------------------------
/算法集合/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/算法集合/.DS_Store
--------------------------------------------------------------------------------
/设计模式/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/设计模式/.DS_Store
--------------------------------------------------------------------------------
/音频处理/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/音频处理/.DS_Store
--------------------------------------------------------------------------------
/Foundation/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ## 16.知不知道在哪里下载苹果的源代码?
2 |
3 | https://openSource.apple.com/tarballs
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Runtime/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/Runtime/.DS_Store
--------------------------------------------------------------------------------
/Runtime/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.如何运用 `Runtime` 字典转模型?
2 |
3 |
4 | `Runtime` 遍历 `ivar_list`,结合 `KVC` 赋值。
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Runtime/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.`Category` 有哪些用途?
2 |
3 | - 给系统类添加方法、属性(需要关联对象)。
4 | - 对某个类大量的方法,可以实现按照不同的名称归类。
5 |
6 |
--------------------------------------------------------------------------------
/WebView/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/WebView/.DS_Store
--------------------------------------------------------------------------------
/代码管理/3.3-8.md:
--------------------------------------------------------------------------------
1 | ## 8.如果自己写的库需要依赖其他的三方库,该怎么办?
2 |
3 | 此时需要修改 `podspec` 文件,在 `s.dependency` 处添加需要以来的三方库即可。
4 |
5 |
--------------------------------------------------------------------------------
/内存管理/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ## 13.函数返回一个对象时,会对对象 `autorelease` 么?为什么?
2 |
3 | 会 ,为了延长返回对象的生命周期,给其他使用者留足调用的时间
4 |
5 |
6 |
--------------------------------------------------------------------------------
/多线程/11.第十一题.md:
--------------------------------------------------------------------------------
1 | 11.信号量 - `dispatch_semaphore`。
2 |
3 | > 如果获取不到 `锁` ,会将当前线程阻塞、休眠,直到其他线程释放 `锁` 时,会唤醒当前线程。
4 |
5 |
--------------------------------------------------------------------------------
/消息传递的方式/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.说一下 `NSNotification` 的特点。
2 |
3 | - 1.一对多
4 | - 2.观察者模式
5 | - 3.不用的时候要移除(貌似现在不用了)
6 |
7 |
--------------------------------------------------------------------------------
/Runtime/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ## 23.`Objective-C` 如何实现多重继承?
2 |
3 |
4 | `Objective-C` 只支持多层继承,不支持多重继承。想实现的话,可以使用协议。
5 |
6 |
--------------------------------------------------------------------------------
/内存管理/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ## 18.`BAD_ACCESS` 在什么情况下出现?
2 |
3 | 访问了已经被销毁的内存空间,就会报出这个错误。
4 | 根本原因是有 `悬垂指针` 没有被释放。
5 |
6 |
7 |
--------------------------------------------------------------------------------
/多线程/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.多线程的 `并行` 和 `并发` 有什么区别?
2 |
3 | 并行:充分利用计算机的多核,在多个线程上同步进行
4 | 并发:在一条线程上通过快速切换,让人感觉在同步进行
5 |
6 |
--------------------------------------------------------------------------------
/消息传递的方式/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.说一下 `NSNotification` 的实现机制?
2 |
3 | 哈希表 + 观察者模式
4 |
5 | 通知涉及到线程的知识,还有合成通知,默认是同步的等等。
6 |
7 |
--------------------------------------------------------------------------------
/消息传递的方式/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.`Block` 处理循环引用。
2 |
3 |
4 | __weak关键字,在 `MRC` 下可以使用 `__Block` 解决循环引用,但在 `ARC` 下就不起作用了
5 |
6 |
--------------------------------------------------------------------------------
/网络/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.封装一个网络框架有哪些注意点?
2 |
3 |
4 | 有时间可以看看这篇文章,思路很好 https://juejin.im/post/5b3a303be51d4555c07a7ae1
5 |
6 |
--------------------------------------------------------------------------------
/网络/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.如何在测试过程中 `MOCK` 各种网络环境?
2 |
3 | https://blog.csdn.net/u010828718/article/details/46986795
4 |
5 |
--------------------------------------------------------------------------------
/UIKit/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.实现一个控件,可以浮在任意界面的上层并支持拖动?
2 |
3 |
4 | 两个方面
5 |
6 | * 1.这个空间要添加在程序的主 `window` 上。
7 | * 2.随手指拖动更新位移
8 |
9 |
--------------------------------------------------------------------------------
/其他问题/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 16.实现一个控件,可以浮在任意界面的上层并支持拖动?
2 |
3 |
4 | 两个方面
5 |
6 | * 1.这个空间要添加在程序的主 `window` 上。
7 | * 2.随手指拖动更新位移
8 |
9 |
--------------------------------------------------------------------------------
/网络/13.第十三题.md:
--------------------------------------------------------------------------------
1 | 13.`断点续传` 功能该怎么实现?
2 |
3 |
4 | * 1.利用 `http` 的头部字段 ,设置 `http` 的 `Range` 属性
5 | * 2.检测下载进度,并且判断是否需要重新创建下载文件
6 |
7 |
--------------------------------------------------------------------------------
/计算题/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.编码求,给定一个整数,按照十进制的编码计算包含多少个 `0`?
2 |
3 | 这道题可以利用数字的计算能力,用这个数字不断对 `10` 进行取余运算,就可以判断出有多少个 `0`。
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GeekLee609/iOS-InterviewQuestion-collection/HEAD/设计模式/DesignPatten/.DS_Store
--------------------------------------------------------------------------------
/Runloop/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.讲一下 `Runloop` 的内部实现逻辑
2 |
3 | 
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Runloop/9.第九题.md:
--------------------------------------------------------------------------------
1 | ## 9.解释一下 `GCD` 在 `Runloop` 中的使用?
2 |
3 | `GCD`由 子线程 返回到 主线程,只有在这种情况下才会触发 RunLoop。会触发 RunLoop 的 Source 1 事件。
4 |
5 |
--------------------------------------------------------------------------------
/内存管理/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.ARC自动内存管理的原则
2 |
3 | - 自己生成的对象,自己持有
4 | - 非自己生成的对象,自己可以持有
5 | - 自己持有的对象不再需要时,需要对其进行释放
6 | - 非自己持有的对象无法释放
7 |
8 |
9 |
--------------------------------------------------------------------------------
/数据结构/链表.md:
--------------------------------------------------------------------------------
1 | ## 链表
2 |
3 |
4 | 首先可以看一下[这篇文章](https://blog.csdn.net/jianyuerensheng/article/details/51585200),其实已经总结的很到位。
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Runtime/25.第二十五题.md:
--------------------------------------------------------------------------------
1 | ## 25.`Obj-c`对象、类的本质是通过什么数据结构实现的?
2 |
3 | 结构体。
4 |
5 | 譬如一个最常见的 `Nsobject` 对象。将其编译为 `C++` 代码后,实际上就是一个 `Nsobject_Impl` 结构体。
--------------------------------------------------------------------------------
/ARKit/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/Foundation/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.`nil`、`NIL`、`NSNULL` 有什么区别?
2 |
3 |
4 | - `nil`、`NIL` 可以说是等价的,都代表内存中一块空地址。
5 |
6 | - `NSNULL` 代表一个指向 `nil` 的对象。
7 |
8 |
--------------------------------------------------------------------------------
/Foundation/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.简述事件传递、事件响应机制。
2 |
3 | [参考文章](https://www.jianshu.com/p/2e074db792ba)
4 |
5 | 概括的讲,事件传递是由内到外,事件响应是由外到内。
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/25.第二十五题的副本 3.md:
--------------------------------------------------------------------------------
1 | ## 25.`Obj-c`对象、类的本质是通过什么数据结构实现的?
2 |
3 | 结构体。
4 |
5 | 譬如一个最常见的 `Nsobject` 对象。将其编译为 `C++` 代码后,实际上就是一个 `Nsobject_Impl` 结构体。
--------------------------------------------------------------------------------
/Runtime/25.第二十五题的副本 4.md:
--------------------------------------------------------------------------------
1 | ## 25.`Obj-c`对象、类的本质是通过什么数据结构实现的?
2 |
3 | 结构体。
4 |
5 | 譬如一个最常见的 `Nsobject` 对象。将其编译为 `C++` 代码后,实际上就是一个 `Nsobject_Impl` 结构体。
--------------------------------------------------------------------------------
/Runtime/25.第二十五题的副本.md:
--------------------------------------------------------------------------------
1 | ## 25.`Obj-c`对象、类的本质是通过什么数据结构实现的?
2 |
3 | 结构体。
4 |
5 | 譬如一个最常见的 `Nsobject` 对象。将其编译为 `C++` 代码后,实际上就是一个 `Nsobject_Impl` 结构体。
--------------------------------------------------------------------------------
/WebView/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.在使用 `WKWedView` 时遇到过哪些问题?
2 |
3 |
4 | 之前不管遇到的还是没遇到的,都在这里了: https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA
5 |
6 |
7 |
--------------------------------------------------------------------------------
/代码管理/1.1-2.md:
--------------------------------------------------------------------------------
1 | ## 2.`git merge` 和 `git rebase` 的区别?
2 |
3 | 参考[这一篇文章](https://blog.csdn.net/wh_19910525/article/details/7554489)即可。
4 |
5 |
6 |
--------------------------------------------------------------------------------
/代码管理/3.3-3.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/图像处理/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/开放性问题/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/性能优化/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/扩展问题/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/数据存储/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/数据结构/1.1-2.md:
--------------------------------------------------------------------------------
1 | ## 2.`git merge` 和 `git rebase` 的区别?
2 |
3 | 参考[这一篇文章](https://blog.csdn.net/wh_19910525/article/details/7554489)即可。
4 |
5 |
6 |
--------------------------------------------------------------------------------
/源代码阅读/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/蓝牙/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/视频处理/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/计算题/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/逆向及安全/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/音频处理/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/项目架构/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/ARKit/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/Core ML/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/Runloop/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ## 15.为什么 `NSTimer` 有时候不好使?
2 |
3 | 因为创建的 `NSTimer` 默认是被加入到了 `defaultMode`,所以当 `Runloop` 的 `Mode` 变化时,当前的 `NSTimer` 就不会工作了。
4 |
5 |
--------------------------------------------------------------------------------
/Runtime/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ## 15.说一下 `Runtime` 消息解析和转发
2 |
3 | 
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/代码管理/3.3-1.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/3.3-2.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/3.3-4.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/3.3-5.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/3.3-6.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/7.第七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`分类` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
--------------------------------------------------------------------------------
/数据结构/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据结构/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/网络/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/蓝牙/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.当页面 `AutoLayout` 出现了问题,怎样快速调试?
2 |
3 |
4 | 可以参考[这篇文章](http://nshint.io/blog/2015/08/17/autolayout-breakpoints/)
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/ARKit/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/6.第六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Core ML/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/代码管理/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/其他问题/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/内存管理/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ## 19.讲一下 `@dynamic` 关键字?
2 |
3 |
4 | `@dynamic` 意味着编译器不会帮助我们自动合成 `setter` 和 `getter` 方法。我们需要手动实现、这里就涉及到 `Runtime` 的动态添加方法的知识点。
5 |
6 |
--------------------------------------------------------------------------------
/图像处理/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/图像处理/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/多线程/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.分步锁 - `NSDistributedLock`。
2 |
3 | 在 引用计数表的数据结构里,一张 `sideTable` 表利用 `分离锁` 被分成了多个部分。
4 |
5 | 这样可以对一张表的多个部分,同时进行操作,提升了效率。
6 |
7 |
8 |
--------------------------------------------------------------------------------
/多线程/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/多线程/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/开放性问题/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/性能优化/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/扩展问题/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据存储/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/3.第三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/4.第四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/5.第五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/8.第八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/数据安全及加密/9.第九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/源代码阅读/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/视频处理/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/计算题/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/10.第十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/逆向及安全/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/音频处理/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/项目架构/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/19.第十九题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/Animation/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ### 分类和类拓展的区别?
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 |
5 | * 2.`分类` 不能给系统的类添加方法。
6 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/10.第十题.md:
--------------------------------------------------------------------------------
1 | 10`通知` 和 `代理` 有什么区别?各自适应的场景?
2 |
3 | * 通知是观察者模式,适合一对多的场景
4 |
5 | * 代理是代理模式(废话),适合一对一的反向传值
6 |
7 | * 通知耦合度低,代理的耦合度高
8 |
9 |
10 |
--------------------------------------------------------------------------------
/网络/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ## 22.如何判断一个请求是否结束?
2 |
3 |
4 | - 1.查看 `Content-Length` 是否达到 1024 字节。
5 | - 2.通过 `Post` 发送请求时,消息一般都是一段一段返回的,看最后的一个 `chunked` 是否为空?
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Runloop/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.如何使用 `Runloop` 实现一个常驻线程?这种线程一般有什么作用?
2 |
3 |
4 | 一般做法是向 `Runloop` 中放一个 `port`。
5 |
6 |
7 | 创建一条常驻的后台线程,做任何你想做的事。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Runtime/1.第一题.md:
--------------------------------------------------------------------------------
1 | 1.实例对象的数据结构?
2 |
3 | 具体可以参看 `Runtime` 源代码,在文件 `objc-private.h` 的第 `127-232` 行。
4 |
5 | 本质上 `objc_object` 的私有属性只有一个 `isa` 指针。指向 `类对象` 的内存地址。
6 |
7 |
--------------------------------------------------------------------------------
/消息传递的方式/13.第十三题.md:
--------------------------------------------------------------------------------
1 | 13.`Block` 自动截取变量。
2 |
3 | `Block` 自动截取变量会截取所有权的修饰符,但是对 `全局变量` 以及 `静态全局变量` 是不会截取的。
4 |
5 | - 对于基本数据类型可以理解为值得传递。
6 | - 对于指针类型,可以理解为地址的传递。
7 |
8 |
--------------------------------------------------------------------------------
/消息传递的方式/5.第五题.md:
--------------------------------------------------------------------------------
1 | ## 5.简述 `KVO` 的注册依赖键是什么?
2 |
3 | 可以参考我的[另一篇文章](https://github.com/liberalisman/KVC-KVO#5%E6%B3%A8%E5%86%8C%E4%BE%9D%E8%B5%96%E9%94%AE)
4 |
5 |
6 |
--------------------------------------------------------------------------------
/消息传递的方式/8.第八题.md:
--------------------------------------------------------------------------------
1 | ## 8.给实例变量赋值时,是否会触发 `KVO`?
2 |
3 |
4 | 不会,只要没有涉及到属性的 `Setter` 方法,就不会触发 KVO 。
5 |
6 | 可以结合第七题来讲一下,如果想触发 KVO ,可以显示的调用 `didChangeValueForKey:`。
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/24.第二十四题.md:
--------------------------------------------------------------------------------
1 | ## 24.`Category` 可不可以添加实例对象?为什么?
2 | 答案是不可以。 Category 的结构体内部没有容纳 Ivar 的数据结构。
3 |
4 | 有很详细的分析,具体可以看[这篇文章](https://www.jianshu.com/p/dcc3284b65bf)
5 |
6 |
--------------------------------------------------------------------------------
/UIKit/9.第九题.md:
--------------------------------------------------------------------------------
1 |
2 | 10.说一下 `UIView` 的生命周期?
3 |
4 | 可以看一下[这篇文章](https://www.jianshu.com/p/9d98fad685c8)
5 |
6 |
7 | 要注意的是 `UIView` 上是否有子控件,以及子控件释放的时机。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/多线程/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ## 18.多线程有哪些优缺点?
2 |
3 |
4 | ##### 创建线程是需要花费资源的
5 |
6 | - 一条主线程占用1M,一条子线程占用 512Kb。
7 | - 线程的切换也是需要花费资源的
8 | - 优点就是提升效率,充分利用了计算机的多核特性。
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Foundation/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 10.`@synthesize` 和 `@dynamic` 分别有什么作用?
2 |
3 | `@synthesize` 是自动合成 `Setter`,`Getter` 方法。
4 |
5 | `@dynamic`是动态添加 `Setter`,`Getter` 方法。
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Runloop/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ## 16.`PerformSelector:afterDelay:`这个方法在子线程中是否起作用?为什么?怎么解决?
2 |
3 | 不起作用,子线程默认没有 `Runloop`,也就没有 `Timer`。
4 |
5 | 解决的办法是可以使用 `GCD` 来实现:`Dispatch_after`
6 |
7 |
--------------------------------------------------------------------------------
/Runtime/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.`Category` 和 `Extension` 有什么区别
2 |
3 | * 1.`分类` 的加载在 `运行时`,`类拓展` 的加载在 `编译时`。
4 | * 2.`类拓展` 不能给系统的类添加方法。
5 | * 3.`类拓展` 只以声明的形式存在,一般存在 .m 文件中。
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/多线程/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.自旋锁 - `OSSpinLock`
2 |
3 | > 自旋锁是一种 “忙等” 的锁,它适用于轻量访问,譬如在 `引用计数表` 和 原子性`atomic`。
4 |
5 | 如果当前线程的 `锁` 被其他线程获取,当前线程会不断探测 `锁` 是否有被释放,如果检测出释放,会第一时间获取这个锁
6 |
7 |
--------------------------------------------------------------------------------
/Foundation/9.第九题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 9.了解 `逆变` 和 `协变` 吗?
3 |
4 |
5 | iOS 9 之后的新特性,基于泛型,在有父子继承关系的时候会用到逆变与协变。
6 |
7 | 可以看一下[这篇文章](https://blog.csdn.net/imkata/article/details/78859482)
8 |
9 |
--------------------------------------------------------------------------------
/Foundation/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.`atomic` 修饰的属性是绝对安全的吗?为什么?
2 |
3 |
4 |
5 | 不是,所谓的安全只是局限于 `Setter`、`Getter` 的访问器方法而言的,你对它做 `Release` 的操作是不会受影响的。这个时候就容易崩溃了。
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Runtime/8.第八题.md:
--------------------------------------------------------------------------------
1 | 说一下 `Method Swizzling`? 说一下在实际开发中你在什么场景下使用过?
2 |
3 | 交换方法。
4 |
5 |
6 | 可以结合 `Aspect` 的使用一起说。
7 |
8 | 其实方法交换,应用于统计个页面停留时长,记录用户路径,Hook系统方法啥的。。。还有不少用途
9 |
10 |
11 |
--------------------------------------------------------------------------------
/UIKit/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`setNeedsDisplay` 和 `layoutIfNeeded` 两者是什么关系?
2 |
3 |
4 | `setNeedsDisplay` 是给当前的视图做了标记。
5 |
6 | `layoutIfNeeded` 查找是否有标记,如果有标记及立刻刷新。
7 |
8 | 只有这二者合起来使用,才会起到立刻刷新的效果。
--------------------------------------------------------------------------------
/内存管理/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.说一下什么是 `悬垂指针`?什么是 `野指针`?
2 |
3 |
4 | ###### 悬垂指针
5 | > 指针指向的内存已经被释放了,但是指针还存在,这就是一个 `悬垂指针` 或者说 `迷途指针`
6 |
7 | ###### 野指针
8 | > 没有进行初始化的指针,其实都是 `野指针`
9 |
10 |
--------------------------------------------------------------------------------
/数据结构/字典.md:
--------------------------------------------------------------------------------
1 | ## 字典
2 |
3 | 字典可以理解为键值对,类似于 `d = {key1 : value1, key2 : value2 }`。
4 |
5 |
6 | 字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己对它们排序。
7 |
8 |
9 | 本质也是通过 `hash` 实现的。
10 |
11 |
--------------------------------------------------------------------------------
/算法集合/8.第八题.md:
--------------------------------------------------------------------------------
1 | 8.求出数组中连续数字的和值
2 |
3 | 举例
4 |
5 | ```objc
6 | // 伪代码
7 | [2,3,3,3,3,9,9,1,2,6,6,6,6,6,7]
8 |
9 | 上面这个数组相同连续数字的和为 6+6+6+6+6 = 30
10 |
11 | ```
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/消息传递的方式/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`Block` 的内存管理。
2 |
3 |
4 | `Block` 的内存管理分两种情况,如果是 `MRC` 其实可以使用 `__Block`,这样 `Block` 内部截取的变量的引用计数不会 `+1`,也就无需程序员动手管理了。
5 |
6 |
7 | 在 `ARC` 下,只要不是循环引用,内存管理就不用操心了
8 |
9 |
--------------------------------------------------------------------------------
/Runtime/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ## `Obj-C` 中的类信息存放在哪里?
2 |
3 |
4 | 类方法存储在元类。
5 |
6 | - 对象方法、属性、成员变量、协议等存放在 Class 对象中。
7 | - 类方法存放在 meta-class 对象中。
8 | - 成员变量的具体指,存放在 instance 对象中。
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/UIKit/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.`Bounds` 和 `Frame` 的区别?
2 |
3 | - `Bounds`:一般是相对于自身来说的,是控件的内部尺寸。如果你修改了 `Bounds`,那么子控件的相对位置也会发生改变。
4 |
5 | - `Frame` :是相对于父控件来说的,是控件的外部尺寸。
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/内存管理/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.访问 `__weak` 修饰的变量,是否已经被注册在了 `@autoreleasePool` 中?为什么?
2 |
3 |
4 | 答案是肯定的,`__weak`修饰的变量属于弱引用,如果没有被注册到 `@autoreleasePool` 中,创建之后也就会随之销毁,为了延长它的生命周期,必须注册到 `@autoreleasePool` 中,以延缓释放。
5 |
6 |
--------------------------------------------------------------------------------
/UIKit/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.`UIView` 和 `CALayer` 是什么关系?
2 |
3 |
4 | `UIView` 和 `CALayer` 算是相互补充的关系。
5 |
6 | `UIView` = `CALayer.delegate`
7 |
8 | `UIView` : 负责用户的交互事件。
9 |
10 | `CALayer`: 负责图像和动画的渲染。
11 |
12 |
--------------------------------------------------------------------------------
/内存管理/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.简要说一下 `@autoreleasePool` 的数据结构?
2 |
3 | 简单说是双向链表,每张链表头尾相接,有 `parent`、`child`指针
4 |
5 | 每创建一个池子,会在首部创建一个 `哨兵` 对象,作为标记
6 |
7 | 最外层池子的顶端会有一个`next`指针。当链表容量满了,就会在链表的顶端,并指向下一张表。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/内存管理/9.第九题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 9.`__weak` 属性修饰的变量,如何实现在变量没有强引用后自动置为 `nil` ?
3 |
4 | 用的弱引用 - `weak`表。也是一张 `哈希表`。
5 |
6 | 被 `weak` 修饰的指针变量所指向的地址是 `key` ,所有指向这块内存地址的指针会被添加在一个数组里,这个数组是 `Value`。当内存地址销毁,数组里的所有对象被置为 `nil`。
7 |
8 |
--------------------------------------------------------------------------------
/多线程/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 10.同步锁 - `Synchronized(self) {// code}`
2 |
3 |
4 | `@synchronized(object)` 指令使用的 `object` 为该锁的唯一标识,只有当标识相同时,才满足互斥。
5 |
6 |
7 | `@synchronized(object)` 简化了加锁的行为,我们不在需要显示的加锁。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Runtime/22.第二十二题.md:
--------------------------------------------------------------------------------
1 | ## 22.是否了解 `Type Encoding`?
2 |
3 | 不懂的可以看文档,中文名 - `类型编码`。
4 |
5 | https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
6 |
7 |
--------------------------------------------------------------------------------
/其他问题/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.`Designated Initializer`的规则?
2 |
3 | 1.[推荐一篇写的很好的文章](https://www.cnblogs.com/smileEvday/p/designated_initializer.html)
4 |
5 |
6 | 2.[这篇文章](https://www.jianshu.com/p/f92972bf7300)写得更简单易懂
7 |
8 |
9 |
--------------------------------------------------------------------------------
/数据结构/数组.md:
--------------------------------------------------------------------------------
1 | ## 数组
2 |
3 |
4 | ### 特点
5 | * 1. 数组是一种最简单的数据结构,它占据一块连续的内存并且顺序存储数据,所以我们需要首先指定数组的大小;
6 | * 2. 数组的空间效率不是很好,会有空闲的区域没有得到充分的应用;
7 | * 3. 时间复杂度为O(1);
8 |
9 | ### 涉及到的算法
10 |
11 | * 二维数组查找问题
12 |
13 |
14 |
--------------------------------------------------------------------------------
/消息传递的方式/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ## 11.`__block` 的解释以及在 `ARC` 和 `MRC` 下有什么不同?
2 |
3 |
4 |
5 |
6 |
7 | `__block` 在 `MRC` 下可以解决循环引用的问题,`block` 内部的变量有了 `__block` 修饰,引用计数不会加1。
8 |
9 | 在 `ARC` 下就需要使用 `__weak` 来实现了。
10 |
11 |
12 |
--------------------------------------------------------------------------------
/设计模式/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.如何实现 `App` 换肤(夜间模式)?
2 |
3 |
4 | 扩利用 [DKNightVersion](https://github.com/Draveness/DKNightVersion) 完成。
5 |
6 |
7 | 同时可以参考一下[这篇文章](https://juejin.im/post/5af93d276fb9a07acf5644d3)。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/其他问题/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.`App` 编译过程有了解吗?
2 |
3 |
4 | 可以参考[这篇文章](https://www.jianshu.com/p/65901441903e)
5 |
6 | ###### 一般会执行如下几个步骤:
7 |
8 | * 预处理
9 | * 语法和语义分析
10 | * 生成代码和优化
11 | * 汇编
12 | * 链接
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/内存管理/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.`__weak` 和 `_Unsafe_Unretain` 的区别?
2 |
3 | weak 修饰的指针变量,在指向的内存地址销毁后,会在 `Runtime` 的机制下,自动置为 `nil`。
4 |
5 | `_Unsafe_Unretain`不会置为 `nil`,容易出现 `悬垂指针`,发生崩溃。但是 `_Unsafe_Unretain` 比 `__weak` 效率高。
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/计算题/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.不使用第三个变量,交换两个变量的值。
2 |
3 |
4 | ```objc
5 | int a = 5;
6 | int b = 10;
7 |
8 | a = a + b; //a=15,b=10;
9 | b = a - b; //a=15,b=5;
10 | a = a - b; //a=10,b=5;
11 |
12 | ```
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Runtime/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ## 21.说一下 `Runtime` 的方法缓存?存储的形式、数据结构以及查找的过程?
2 |
3 | `cache_t`增量扩展的哈希表结构。哈希表内部存储的 `bucket_t`。
4 |
5 | `bucket_t` 中存储的是 `SEL` 和 `IMP`的键值对。
6 |
7 | - 如果是有序方法列表,采用二分查找
8 |
9 | - 如果是无序方法列表,直接遍历查找
10 |
11 |
--------------------------------------------------------------------------------
/Runloop/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.`Runloop` 和线程的关系?
2 |
3 | 1. 一个线程对应一个 `Runloop`。
4 |
5 | 2. 主线程的默认就有了 `Runloop`。
6 |
7 |
8 | 3. 子线程的 `Runloop` 以懒加载的形式创建。
9 |
10 |
11 | 4. `Runloop` 存储在一个全局的可变字典里,线程是 `key` ,`Runloop` 是 `value`。
12 |
13 |
--------------------------------------------------------------------------------
/Runtime/2.第二题.md:
--------------------------------------------------------------------------------
1 | 2.类对象的数据结构?
2 |
3 | 具体可以参看 `Runtime` 源代码。
4 |
5 | > 类对象就是 `objc_class`。
6 |
7 | 它的结构相对丰富一些。
8 |
9 | - `superClass`:指向父类
10 | - `Cache`:方法的缓存列表
11 | - `data`:顾名思义,就是数据。是一个被封装好的 `class_rw_t` 。
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/消息传递的方式/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ## 15.Block 有几种类型?分别是什么?
2 |
3 | 一共有三种
4 |
5 | * 1.堆 Block
6 | * 2.栈 Block
7 | * 3.全局 Block
8 |
9 | ```objc
10 | NSStackBlock 存储于栈区
11 | NSGlobalBlock 存储于程序数据区
12 | NSMallocBlock 存储于堆区
13 | ```
14 |
15 |
--------------------------------------------------------------------------------
/Animation/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.简要说一下常用的动画库。
2 |
3 |
4 | 我之前在动画方面用的较少。
5 |
6 | 最常用的是 `FaceBook` 的 [Pop](https://github.com/facebook/pop)。
7 |
8 | 目前 `AirBnb` 的 [Lottie](https://github.com/airbnb/lottie-ios) 也很好,感兴趣可以去看看
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/其他问题/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ## 15.`UIButton` 的父类是什么?`UILabel` 的父类又是什么?
2 |
3 |
4 |
5 | * UIButton -> UIControl -> UIView -> UIResponder
6 |
7 | * UILabel -> UIView -> UIResponder
8 |
9 | 区别就在于 `UIControlState....`、`UIControlEvent.....`
10 |
11 |
--------------------------------------------------------------------------------
/UIKit/5.第五题.md:
--------------------------------------------------------------------------------
1 | ## 5.`UIButton` 的父类是什么?`UILabel` 的父类又是什么?
2 |
3 |
4 |
5 | * UIButton -> UIControl -> UIView -> UIResponder
6 |
7 | * UILabel -> UIView -> UIResponder
8 |
9 | 区别就在于 `UIControlState....`、`UIControlEvent.....`
10 |
11 |
12 |
--------------------------------------------------------------------------------
/数据安全及加密/6.第六题.md:
--------------------------------------------------------------------------------
1 | 6.简述 `SSL` 加密的过程用了哪些加密方法,为何这么作?
2 |
3 | `SSL` 加密的过程之前有些过,此处不再赘述。
4 |
5 |
6 | `SSL` 加密,在过程中实际使用了 `对称加密` 和 `非对称加密` 的结合。
7 |
8 | 主要的考虑是先使用 `非对称加密` 进行连接,这样做是为了避免中间人攻击秘钥被劫持,但是 `非对称加密` 的效率比较低。所以一旦建立了安全的连接之后,就可以使用轻量的 `对称加密`。
9 |
10 |
--------------------------------------------------------------------------------
/WebView/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.说一下 `JS` 和 `OC` 互相调用的几种方式?
2 |
3 | 我所知的有三种:
4 |
5 | - 1.协议头拦截
6 | - 2.JavaScriptCore - JSExpert
7 | - 3.WKWebView - ContentController
8 |
9 |
10 | 与 `WebView` 相关的知识可以看一下[这篇文章](https://www.jianshu.com/p/870dba42ec15)
11 |
12 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/调试技巧/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.`iOS` 常见的崩溃类型有哪些?
2 |
3 |
4 | * unrecognized selector crash
5 | * KVO crash
6 | * NSNotification crash
7 | * NSTimer crash
8 | * Container crash
9 | * NSString crash
10 | * Bad Access crash (野指针)
11 | * UI not on Main Thread Crash
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Foundation/14.第十四题.md:
--------------------------------------------------------------------------------
1 | ## 14.头文件导入的方式?
2 |
3 |
4 | 特别是针对以 CocoaPods 集成进来的库
5 |
6 | ```objc
7 | #if __has_include()
8 | #import
9 | #else
10 | #import "AFNetworking.h"
11 | #endif
12 | ```
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Runloop/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`PerformSelector` 的实现原理?
2 |
3 |
4 | 当调用 NSObject 的 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程的 RunLoop 中。所以如果当前线程没有 RunLoop,则这个方法会失效。
5 |
6 | 当调用 performSelector:onThread: 时,实际上其会创建一个 Timer 加到对应的线程去,同样的,如果对应线程没有 RunLoop 该方法也会失效。
7 |
8 |
--------------------------------------------------------------------------------
/Runtime/10.第十题.md:
--------------------------------------------------------------------------------
1 | 10.说一下对 `isa` 指针的理解, 对象的`isa` 指针指向哪里?`isa` 指针有哪两种类型?
2 |
3 | `isa` 等价于 `is kind of`
4 |
5 | - 实例对象 `isa` 指向类对象
6 | - 类对象指 `isa` 向元类对象
7 | - 元类对象的 `isa` 指向元类的基类
8 |
9 |
10 | `isa` 有两种类型
11 | - 纯指针,指向内存地址
12 | - `NON_POINTER_ISA`,除了内存地址,还存有一些其他信息
13 |
14 |
15 |
--------------------------------------------------------------------------------
/内存管理/15.第十五题.md:
--------------------------------------------------------------------------------
1 | 15.内存管理默认的关键字是什么?
2 |
3 |
4 | ###### MRC
5 |
6 | ```OBJC
7 | @property (atomic,readWrite,retain) UIView *view;
8 | ```
9 |
10 | ###### ARC
11 |
12 | ```OBJC
13 | @property (atomic,readWrite,strong) UIView *view;
14 | ```
15 |
16 | 如果改为基本数据类型,那就是 `assign`。
17 |
18 |
--------------------------------------------------------------------------------
/网络/9.第九题.md:
--------------------------------------------------------------------------------
1 | ## 9.数据传输的加密过程?
2 |
3 | **SSL(安全套接层)**
4 | **TLA(传输层安全)**
5 |
6 | > 以上两者在传输层之上,对网络连接进行加密处理,保障数据的完整性,更加的安全。
7 |
8 |
9 | - 1.客户端:发送数据 -> HTTP(应用层) -> SSL&TLS(加密处理) -> TCP(传输层) -> IP(网络层)
10 |
11 | - 2.服务端: IP(网络层) -> TCP(传输层) -> SSL&TLS(解密处理) -> HTTP(应用层) -> 接受数据
12 |
13 |
--------------------------------------------------------------------------------
/Runloop/2.第二题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 2.讲一下 `Runloop` 的 `Mode`?(越详细越好)
3 |
4 | - 一共有5个 `Mode`,常用的有仨,其中一个是占位用的。
5 |
6 | - `Mode` 里面有一个或者多个 `Source`、`timer`、 `Observer`。
7 | - `Source`事件源,分 0 和 1;本质就是函数回调
8 | - `timer` 就是计时器
9 | - `Observer` 顾名思义观察者
10 |
11 | - 'Mode' 的切换
12 |
13 |
14 |
--------------------------------------------------------------------------------
/网络/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.`HTTP` 请求报文 和 响应报文的结构?
2 | ##### 1.请求报文的结构。
3 | - ①:请求行 (请求方式、URL)
4 | - ②:首部行(键值对形式,`CRLF` 代表换行结束)
5 | - ③:实体主体(post请求中,存放请求参数)
6 |
7 | ##### 1.响应报文的结构。
8 | - ①:响应行 (版本、状态码)
9 | - ②:首部行 (键值对形式,`CRLF` 代表换行结束)
10 | - ③:实体主体(响应返回的数据)
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectA1.h:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectA1.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectA.h"
10 |
11 | @interface ObjectA1 : BaseObjectA
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectA2.h:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectA2.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectA.h"
10 |
11 | @interface ObjectA2 : BaseObjectA
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectB1.h:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectB1.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectB.h"
10 |
11 | @interface ObjectB1 : BaseObjectB
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectB2.h:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectB2.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectB.h"
10 |
11 | @interface ObjectB2 : BaseObjectB
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Foundation/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`typeof` 和 `__typeof`,`__typeof__` 的区别?
2 |
3 | `__typeof __()` 和 `__typeof()` 是 `C语言` 的编译器特定扩展,因为标准 `C` 不包含这样的运算符。 标准 `C` 要求编译器用双下划线前缀语言扩展(这也是为什么你不应该为自己的函数,变量等做这些)
4 |
5 | `typeof()` 与前两者完全相同的,只不过去掉了下划线,同时现代的编译器也可以理解。
6 |
7 | 所有这三个意思是相同的,但没有一个是标准C,不同的编译器会按需选择符合标准的写法。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/网络/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ## 21.抓包软件 `Charles` 的原理是什么?说一下中间人攻击的过程。
2 |
3 |
4 | `Charles` 的原理实际就是网络的 `中间人攻击`。
5 |
6 | 中间人(MITM)攻击是一种攻击类型,其中攻击者将它自己放到两方之间,通常是客户端和服务端通信线路的中间。这可以通过破坏原始频道之后拦截一方的消息并将它们转发(有时会有改变)给另一方来实现。
7 |
8 |
9 | * 客户端发给服务端的请求,被中间人劫持篡改之后,再发送给服务端。
10 |
11 | * 服务端返回给客户端的数据,被中间人劫持篡改之后,再返回给客户端。
12 |
13 |
--------------------------------------------------------------------------------
/网络/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.4.`Http`的请求方式有哪些?`Http` 有什么特性?
2 |
3 | **`Http`的请求方式有一下 8 种:**
4 |
5 | * 1.GET
6 | * 2.POST
7 | * 3.HEAD
8 | * 4.PUT
9 | * 5.DELETE
10 | * 6.OPTIONS
11 | * 7.TRACE
12 | * 8.CONNECT
13 |
14 | **`Http` 的特点有:**
15 |
16 | * 1.无连接:可以理解为持久链接。
17 | * 2.无状态:利用 `session` && `cookie` 区分用户。
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Animation/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 2.请说一下对 CALayer 的认识。
2 |
3 |
4 | `layer` 层是涂层绘制、渲染、以及动画的完成者,它无法直接的处理触摸事件(也可以捕捉事件)
5 |
6 | `layer` 包含的方面非常多,常见的属性有 `Frame`、`Bounds`、`Position`、`AnchorPoint`、`Contents` 等等。
7 |
8 | 想详细了解 `CALayer` 以及动画的 ,可以看看这本书 - [Core-Animation](https://legacy.gitbook.com/book/zsisme/ios-/details)
9 |
10 |
11 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Adapter/Target.h:
--------------------------------------------------------------------------------
1 | //
2 | // Target.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface Target : NSObject
12 |
13 | - (void)operation;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/多线程/16.第十六题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 15.`NSMutableArray`、和 `NSMutableDictionary`是线程安全的吗?`NSCache`呢?
3 |
4 |
5 |
6 | > 在做缓存时,优先使用 `NSCache` 而不是 `NSDictionary` ,我们熟悉的框架 `SDWebimage` 就是采用的 `NSCache`。
7 |
8 | `NSCache` 优点如下:
9 |
10 | 1. 系统资源将要耗尽时,它可以自动删减缓存。
11 | 2. 可以设置最大缓存数量。
12 | 3. 可以设置最大占用内存值。
13 | 4. `NSCache` 线程是安全的。
14 |
15 |
16 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/SingleInstance/Mooc.h:
--------------------------------------------------------------------------------
1 | //
2 | // Mooc.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface Mooc : NSObject
12 |
13 | + (id)sharedInstance;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/BridgeDemo.h:
--------------------------------------------------------------------------------
1 | //
2 | // BridgeDemo.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BridgeDemo : NSObject
12 |
13 | - (void)fetch;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Adapter/Target.m:
--------------------------------------------------------------------------------
1 | //
2 | // Target.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "Target.h"
10 |
11 | @implementation Target
12 |
13 | - (void)operation
14 | {
15 | // 原有的具体业务逻辑
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/BaseObjectB.h:
--------------------------------------------------------------------------------
1 | //
2 | // BaseObjectB.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BaseObjectB : NSObject
12 |
13 | - (void)fetchData;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectB1.m:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectB1.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "ObjectB1.h"
10 |
11 | @implementation ObjectB1
12 |
13 | - (void)fetchData{
14 | // 具体的逻辑处理
15 | }
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectB2.m:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectB2.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "ObjectB2.h"
10 |
11 | @implementation ObjectB2
12 |
13 | - (void)fetchData{
14 | // 具体的逻辑处理
15 | }
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/内存管理/2.第二题.md:
--------------------------------------------------------------------------------
1 | ## 使用自动引用计数应遵循的原则
2 |
3 | - 不能使用 `retain`、`release`、`retainCount`、`autorelease`。
4 | - 不可以使用 `NSAllocateObject`、`NSDeallocateObject`。
5 | - 必须遵守内存管理方法的命名规则。
6 | - 不需要显示的调用 `Dealloc`。
7 | - 使用 `@autoreleasePool` 来代替 `NSAutoreleasePool`。
8 | - 不可以使用区域 `NSZone`。
9 | - 对象性变量不可以作为 `C` 语言的结构体成员。
10 | - 显示转换 `id` 和 `void*`。
11 |
12 |
--------------------------------------------------------------------------------
/Animation/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.解释一下 `CALayer.contents` 属性。
2 |
3 | `CALayer` 的 `Contents` 有几下几个主要的属性:
4 |
5 | ###### ContentsRect
6 |
7 | 单位制(0 - 1),限制显示的范围区域
8 |
9 | ###### ContentGravity
10 |
11 | 类似于 ContentMode,不过不是枚举值,而是字符串
12 |
13 | ###### ContentsScale
14 |
15 | 决定了物理显示屏是 几@X屏
16 |
17 | ###### ContentsCenter
18 |
19 | 跟拉伸有关的属性
20 |
21 |
--------------------------------------------------------------------------------
/代码管理/1.1-3.md:
--------------------------------------------------------------------------------
1 | ## 3.如何在本地新建一个分支,并 `push` 到远程服务器上?
2 |
3 | 1.加入我在本地新建了一个分支
4 |
5 | ```objc
6 | git checkout origin/master -b simple
7 | ```
8 |
9 | 2.我在这个分支上新建了一些文件,要把这个分支推送到服务器上
10 |
11 | ```objc
12 | git push origin simple
13 | ```
14 |
15 | 3.用git branch -av 查看服务器上的分支,会多出一个分支:
16 |
17 | ```objc
18 | origin/simple
19 | ```
20 |
21 |
22 |
--------------------------------------------------------------------------------
/数据结构/1.1-3.md:
--------------------------------------------------------------------------------
1 | ## 3.如何在本地新建一个分支,并 `push` 到远程服务器上?
2 |
3 | 1.加入我在本地新建了一个分支
4 |
5 | ```objc
6 | git checkout origin/master -b simple
7 | ```
8 |
9 | 2.我在这个分支上新建了一些文件,要把这个分支推送到服务器上
10 |
11 | ```objc
12 | git push origin simple
13 | ```
14 |
15 | 3.用git branch -av 查看服务器上的分支,会多出一个分支:
16 |
17 | ```objc
18 | origin/simple
19 | ```
20 |
21 |
22 |
--------------------------------------------------------------------------------
/消息传递的方式/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.`KVO` 在使用过程中有哪些注意点?有没有使用过其他优秀的 `KVO` 三方替代框架?
2 |
3 | ##### 注意点
4 |
5 | * 1.在继承关系中,如果父类也绑定了一些 `KVO`,子类在自己的路径中没有找到对应的路径是应该去父类找的,所以要显示调用 `super`。
6 |
7 | * 2.父类和子类有可能对同一个属性进行观察,我们知道如果对同一个属性的观察者移除两次会造成崩溃,所以我们每个类应该有唯一的 `Context` 进行区分。
8 |
9 | ###### 替代品 :FaceBook - [KVOController](https://github.com/facebook/KVOController)
10 |
11 |
--------------------------------------------------------------------------------
/网络/10.第十题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 10.说一下 `TCP/IP` 五层模型的协议?
3 |
4 |
5 |
6 | #### 应用层
7 | #### 传输层
8 | #### 网路层
9 | #### 数据链路层
10 | #### 物理层
11 |
12 |
13 | 
14 |
15 | 
16 |
17 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/BaseObjectB.m:
--------------------------------------------------------------------------------
1 | //
2 | // BaseObjectB.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectB.h"
10 |
11 | @implementation BaseObjectB
12 |
13 | - (void)fetchData
14 | {
15 | // override to subclass
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/消息传递的方式/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.如何做到 `KVO` 手动通知?
2 |
3 | ```objc
4 | 显式的调用 didChangeValueForKey:
5 | ```
6 |
7 | 如果想实现手动通知,我们需要借助一个额外的方法
8 |
9 | ```objc
10 | + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
11 | ```
12 |
13 | 这个方法默认返回`YES`,用来标记 `Key` 指定的属性是否支持 `KVO`,如果返回值为 `NO`,则需要我们手动更新。
14 |
15 | 可以参考我的[另一篇文章](https://github.com/liberalisman/KVC-KVO)
16 |
17 |
--------------------------------------------------------------------------------
/网络/20.第二十题.md:
--------------------------------------------------------------------------------
1 | # 20.网络请求的状态码都大致代表什么意思?
2 |
3 | ##### 1.1xx
4 |
5 | > 1xx 代表临时响应,需要请求者继续执行操作的状态代码。
6 |
7 | ##### 2.2xx
8 |
9 | > 2xx 代表的多是操作成功。
10 |
11 | ##### 3.3xx
12 |
13 | > 3xx 代表重定向,表示要完成请求,需要进一步操作
14 |
15 | ##### 4.4xx
16 |
17 | > 4xx 代表请求错误,表示请求可能出错,妨碍了服务器的处理。
18 |
19 | ##### 5.5xx
20 |
21 | > 5xx 代表服务器错误,表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
22 |
23 |
--------------------------------------------------------------------------------
/网络/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.`Http` 和 `Https` 的区别?为什么更加安全?
2 |
3 |
4 | ##### 区别
5 |
6 | * 1.`HTTPS` 需要向机构申请 `CA` 证书,极少免费。
7 | * 2.`HTTP` 属于明文传输,`HTTPS`基于 `SSL` 进行加密传输。
8 | * 3.`HTTP` 端口号为 `80`,`HTTPS` 端口号为 `443` 。
9 | * 4.`HTTPS` 是加密传输,有身份验证的环节,更加安全。
10 |
11 |
12 | ##### 安全
13 | **SSL(安全套接层)**
14 | **TLS(传输层安全)**
15 |
16 |
17 | 以上两者在传输层之上,对网络连接进行加密处理,保障数据的完整性,更加的安全。
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Foundation/15.第十五题.md:
--------------------------------------------------------------------------------
1 | ## 如何将 `Obj-C` 代码改变为 `C++/C` 的代码?
2 |
3 | ```
4 | // 在当前路径下执行
5 | clang rewrite-objc main.m -o main.cpp
6 | ```
7 | 上面的方法会生成不同平台下的源代码,大约有10万行,但我们只想要 iOS 平台下的相关代码,我们可取以下的方式:
8 |
9 |
10 | ```
11 | // xcrun == Xcode Run
12 | // -sdk 指定系统平台
13 | // -arch 指定的架构
14 | xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
15 | ```
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Runtime/26.第二十六题.md:
--------------------------------------------------------------------------------
1 | ## 26.`Category` 在编译过后,是在什么时机与原有的类合并到一起的?
2 |
3 | 1. 程序启动后,通过编译之后,Runtime 会进行初始化,调用 `_objc_init`。
4 | 2. 然后会 `map_images`。
5 | 3. 接下来调用 `map_images_nolock`。
6 | 4. 再然后就是 `read_images`,这个方法会读取所有的类的相关信息。
7 | 5. 最后是调用 `reMethodizeClass:`,这个方法是重新方法化的意思。
8 | 6. 在 `reMethodizeClass:` 方法内部会调用 **`attachCategories:`** ,这个方法会传入 Class 和 Category ,会将方法列表,协议列表等与原有的类合并。最后加入到 **`class_rw_t`** 结构体中。
--------------------------------------------------------------------------------
/内存管理/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ## 16.内存中的5大区分别是什么?
2 |
3 |
4 | - 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。
5 | - 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
6 | - 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。
7 | - 文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放。
8 | - 程序代码区:存放函数体的二进制代码。
9 |
10 |
11 |
--------------------------------------------------------------------------------
/设计模式/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.如何设计一个时长统计框架?
2 |
3 |
4 | ### 记录器
5 |
6 | - 页面式记录器
7 | - 流式记录器
8 | - 自定义式
9 |
10 |
11 | ### 记录管理者
12 |
13 | - 内存记录缓存
14 | - 磁盘存储
15 | - 上传器
16 |
17 |
18 |
19 | ### 如何降低数据的丢失率?
20 | - 定期写入磁盘
21 | - 每当达到某个值的时候,就写入磁盘
22 |
23 |
24 | ### 记录上传的时机
25 |
26 | - 前后台切换的时候可以上传
27 | - 从无网到有网切换的时候可以上传
28 |
29 | ### 上传时机的选择
30 | - 立即上传
31 | - 定时上传
32 | - 延时上传
33 |
34 |
35 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | @end
17 |
18 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Adapter/CoolTarget.h:
--------------------------------------------------------------------------------
1 | //
2 | // CoolTarget.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "Target.h"
10 |
11 | // 适配对象
12 | @interface CoolTarget : NSObject
13 |
14 | // 被适配对象
15 | @property (nonatomic, strong) Target *target;
16 |
17 | // 对原有方法包装
18 | - (void)request;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Adapter/CoolTarget.m:
--------------------------------------------------------------------------------
1 | //
2 | // CoolTarget.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "CoolTarget.h"
10 |
11 | @implementation CoolTarget
12 |
13 | - (void)request
14 | {
15 | // 额外处理
16 |
17 | [self.target operation];
18 |
19 | // 额外处理
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectA2.m:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectA2.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "ObjectA2.h"
10 |
11 | @implementation ObjectA2
12 |
13 | - (void)handle
14 | {
15 | // before 业务逻辑操作
16 |
17 | [super handle];
18 |
19 | // after 业务逻辑操作
20 | }
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/Runloop/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.什么是异步绘制?
2 |
3 | > 异步绘制,就是可以在子线程把需要绘制的图形,提前在子线程处理好。将准备好的图像数据直接返给主线程使用,这样可以降低主线程的压力。
4 |
5 |
6 | ###### 异步绘制的过程
7 |
8 | 要通过系统的 `[view.delegate displayLayer:]` 这个入口来实现异步绘制。
9 |
10 | - 代理负责生成对应的 Bitmap
11 | - 设置该 Bitmap 为 layer.contents 属性的值。
12 |
13 |
14 | 整个过程可以通过一张图来说明
15 |
16 | 
17 |
18 |
--------------------------------------------------------------------------------
/消息传递的方式/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.在什么情况下会触发 `KVO`?
2 |
3 | ###### 1.使用了KVC
4 |
5 | 使用了 `KVC`,如果有访问器方法,则运行时会在访问器方法中调用 `will/didChangeValueForKey:` 方法;
6 | 没用访问器方法,运行时会在 `setValue:forKey` 方法中调用 `will/didChangeValueForKey:`方法。
7 |
8 | ###### 2.有访问器方法
9 |
10 | 运行时会重写访问器方法调用 `will/didChangeValueForKey:` 方法。
11 | 因此,直接调用访问器方法改变属性值时,`KVO` 也能监听到。
12 |
13 | ###### 3.直接调用
14 |
15 | 显式调用 `will/didChangeValueForKey:` 方法。
16 |
17 |
18 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/ObjectA1.m:
--------------------------------------------------------------------------------
1 | //
2 | // ObjectA1.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "ObjectA1.h"
10 |
11 | @implementation ObjectA1
12 |
13 | - (void)handle
14 | {
15 | // before 业务逻辑操作
16 |
17 | [super handle];
18 |
19 | // after 业务逻辑操作
20 | }
21 |
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/其他问题/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.`load` 和 `Initialize` 的区别?
2 |
3 |
4 |
5 | ##### `initialize(初始化)` 方法和 `load(加载)` 调用时机
6 | * `+ initialize` 方法:苹果官方对这个方法有这样的一段描述:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量。
7 | * `load` 方法会在加载类的时候就被调用,也就是应用启动的时候,在调用 `main` 函数之前会加载所有的类,也会调用每个类的 `load` 方法。
8 |
9 | * `initialize` 方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次;
10 | * `initialize` 的调用发生在 `+init` 方法之前,创建子类的时候,子类会去调用父类的 `initialize` 方法。
11 |
12 |
13 |
--------------------------------------------------------------------------------
/内存管理/17.第十七题.md:
--------------------------------------------------------------------------------
1 | ## 17.是否了解 `深拷贝` 和 `浅拷贝` 的概念,集合类深拷贝如何实现
2 |
3 | `深拷贝`内存拷贝
4 | `浅拷贝`指针拷贝
5 |
6 | **浅拷贝**
7 | 
8 |
9 | **深拷贝**
10 | 
11 |
12 |
13 | **总结**
14 | 
15 |
16 |
17 |
18 | **集合类深拷贝通过归档、解档实现。**
19 |
20 |
--------------------------------------------------------------------------------
/网络/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.`GET` 和 `POST` 请求的区别?
2 |
3 | ##### 1.参数位置
4 | - 1.`GET` 方式的请求参数以 `?` 拼接到 `Url` 后面。
5 | - 2.`Post` 请求的参数在请求体内。
6 |
7 | ##### 2.参数长度
8 |
9 | - 1.`GET` 方式的请求参数长度限制为 2048字符。
10 | - 2.`Post` 请求的参数长度没有该限制。
11 |
12 | ##### 3.安全性
13 |
14 | - 1.`GET` 方式不会引起服务端的任何变化
15 |
16 | ##### 4.幂等性(同一方法执行多次和执行一次效果相同)
17 | - 1.`GET` 幂等。
18 | - 2.`POST` 不幂等。
19 |
20 | ##### 5.缓存性
21 | - 1.`GET` 可缓存。
22 | - 2.`Post` 不可缓存。
23 |
24 |
25 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/BaseObjectA.h:
--------------------------------------------------------------------------------
1 | //
2 | // BaseObjectA.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "BaseObjectB.h"
11 | @interface BaseObjectA : NSObject
12 |
13 | // 桥接模式的核心实现
14 | @property (nonatomic, strong) BaseObjectB *objB;
15 |
16 | // 获取数据
17 | - (void)handle;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Runloop/8.第八题.md:
--------------------------------------------------------------------------------
1 | ## 8.解释一下 `手势识别` 的过程?
2 |
3 | 当上面的 `_UIApplicationHandleEventQueue() `识别了一个手势时,其首先会调用 `Cancel` 将当前的 `touchesBegin/Move/End` 系列回调打断。随后系统将对应的 `UIGestureRecognizer` 标记为待处理。
4 |
5 | 苹果注册了一个 `Observer` 监测 `BeforeWaiting` (Loop即将进入休眠) 事件,这个 `Observer` 的回调函数是 `_UIGestureRecognizerUpdateObserver()`,其内部会获取所有刚被标记为待处理的 `GestureRecognizer`,并执行`GestureRecognizer` 的回调。
6 |
7 | 当有 `UIGestureRecognizer` 的变化(创建/销毁/状态改变)时,这个回调都会进行相应处理。
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Runtime/13.第十三题.md:
--------------------------------------------------------------------------------
1 | 13.说一下对 `class_rw_t` 的理解?
2 |
3 | `rw`代表可读可写。
4 |
5 | `ObjC` 类中的属性、方法还有遵循的协议等信息都保存在 `class_rw_t` 中:
6 |
7 | ```objc
8 | struct class_rw_t {
9 | uint32_t flags;
10 | uint32_t version;
11 |
12 | const class_ro_t *ro;
13 |
14 | method_array_t methods;
15 | property_array_t properties;
16 | protocol_array_t protocols;
17 |
18 | Class firstSubclass;
19 | Class nextSiblingClass;
20 | };
21 | ```
22 |
23 |
--------------------------------------------------------------------------------
/Runloop/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.讲一下 `Observer` ?
2 |
3 | ```objc
4 | typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
5 | kCFRunLoopEntry = (1UL << 0), // 即将进入Loop
6 | kCFRunLoopBeforeTimers = (1UL << 1), // 即将处理 Timer
7 | kCFRunLoopBeforeSources = (1UL << 2), // 即将处理 Source
8 | kCFRunLoopBeforeWaiting = (1UL << 5), // 即将进入休眠
9 | kCFRunLoopAfterWaiting = (1UL << 6), // 刚从休眠中唤醒
10 | kCFRunLoopExit = (1UL << 7), // 即将退出Loop
11 | };
12 | ```
13 |
14 |
--------------------------------------------------------------------------------
/多线程/9.第九题.md:
--------------------------------------------------------------------------------
1 | ## 9.递归锁 - `NSRecursiveLock`
2 |
3 | ```objc
4 | @interface NSRecursiveLock : NSObject {
5 | @private
6 | void *_priv;
7 | }
8 |
9 | - (BOOL)tryLock;
10 | - (BOOL)lockBeforeDate:(NSDate *)limit;
11 |
12 | @property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0);
13 |
14 | @end
15 | NSRecursiveLock 是递归锁,他和 NSLock 的区别在于,NSRecursiveLock 可以在一个线程中重复加锁(反正单线程内任务是按顺序执行的,不会出现资源竞争问题),NSRecursiveLock 会记录上锁和解锁的次数,当二者平衡的时候,才会释放锁,其它线程才可以上锁成功。
16 | ```
17 |
18 |
--------------------------------------------------------------------------------
/消息传递的方式/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.简述 `KVO` 的实现机制。
2 |
3 | 可以看我之前写的博客 - [KVC-KVO](https://github.com/liberalisman/KVC-KVO)
4 |
5 | 实际上是采用了 isa——swilling 的方法。
6 |
7 | - 利用 `Runtime API` 动态生成一个子类,并且让 `instance` 对象的 isa 指向这个全新的子类。
8 | - 当修改 instance 对象的属性时,会调用 Foundation 的`_NSSetXXXValueAndNotify` 函数
9 |
10 | ```objc
11 | willChangeValueForKey:
12 | 父类原来的setter
13 | didChangeValueForKey:
14 | ```
15 |
16 | - 内部会触发监听器(Oberser)的监听方法`observeValueForKeyPath:ofObject:change:context:`。
--------------------------------------------------------------------------------
/网络/24.第二十四题.md:
--------------------------------------------------------------------------------
1 | ## 24.解释一下 `Http` 的持久连接?
2 |
3 |
4 | > 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
5 |
6 | >使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
7 |
8 | >每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
9 |
10 |
11 |
12 | ###### keep-alive
13 | **connection:keep-alive**,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
14 |
15 | ###### timeout
16 | **timeout:20** 表示持续时间
17 |
18 | ###### max
19 | **max:30** 表示最多建立多少个 `Http` 连接
20 |
21 |
22 |
--------------------------------------------------------------------------------
/网络/28.第二十八题.md:
--------------------------------------------------------------------------------
1 | ## 24.解释一下 `Http` 的持久连接?
2 |
3 |
4 | > 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
5 |
6 | >使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
7 |
8 | >每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
9 |
10 |
11 |
12 | ###### keep-alive
13 | **connection:keep-alive**,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
14 |
15 | ###### timeout
16 | **timeout:20** 表示持续时间
17 |
18 | ###### max
19 | **max:30** 表示最多建立多少个 `Http` 连接
20 |
21 |
22 |
--------------------------------------------------------------------------------
/网络/29.第二十九题.md:
--------------------------------------------------------------------------------
1 | ## 24.解释一下 `Http` 的持久连接?
2 |
3 |
4 | > 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
5 |
6 | >使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
7 |
8 | >每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
9 |
10 |
11 |
12 | ###### keep-alive
13 | **connection:keep-alive**,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
14 |
15 | ###### timeout
16 | **timeout:20** 表示持续时间
17 |
18 | ###### max
19 | **max:30** 表示最多建立多少个 `Http` 连接
20 |
21 |
22 |
--------------------------------------------------------------------------------
/网络/30.第三十题.md:
--------------------------------------------------------------------------------
1 | ## 24.解释一下 `Http` 的持久连接?
2 |
3 |
4 | > 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
5 |
6 | >使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
7 |
8 | >每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
9 |
10 |
11 |
12 | ###### keep-alive
13 | **connection:keep-alive**,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
14 |
15 | ###### timeout
16 | **timeout:20** 表示持续时间
17 |
18 | ###### max
19 | **max:30** 表示最多建立多少个 `Http` 连接
20 |
21 |
22 |
--------------------------------------------------------------------------------
/网络/31.第三十一题.md:
--------------------------------------------------------------------------------
1 | ## 24.解释一下 `Http` 的持久连接?
2 |
3 |
4 | > 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
5 |
6 | >使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
7 |
8 | >每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
9 |
10 |
11 |
12 | ###### keep-alive
13 | **connection:keep-alive**,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
14 |
15 | ###### timeout
16 | **timeout:20** 表示持续时间
17 |
18 | ###### max
19 | **max:30** 表示最多建立多少个 `Http` 连接
20 |
21 |
22 |
--------------------------------------------------------------------------------
/内存管理/5.第五题.md:
--------------------------------------------------------------------------------
1 | ## 5.`ARC` 的 `retainCount` 怎么存储的?
2 |
3 | 存在64张哈希表中,根据哈希算法去查找所在的位置,无需遍历,十分快捷
4 |
5 | 散列表(引用计数表、weak表)
6 | - `SideTables` 表在 非嵌入式的64位系统中,有 64张 `SideTable` 表
7 | - 每一张 `SideTable` 主要是由三部分组成。`自旋锁`、`引用计数表`、`弱引用表`。
8 | - 全局的 `引用计数` 之所以不存在同一张表中,是为了避免资源竞争,解决效率的问题。
9 | - `引用计数表` 中引入了 `分离锁`的概念,将一张表分拆成多个部分,对他们分别加锁,可以实现并发操作,提升执行效率
10 |
11 |
12 | #### 引用计数表(哈希表)
13 |
14 | 通过指针的地址,查找到引用计数的地址,大大提升查找效率
15 |
16 | 通过 `DisguisedPtr(objc_object)` 函数存储,同时也通过这个函数查找,这样就避免了循环遍历。
17 |
18 |
--------------------------------------------------------------------------------
/性能优化/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 6.如何高性能的画一个圆角?
2 |
3 |
4 | > 视图和圆角的大小对帧率并没有什么卵影响,数量才是伤害的核心输出
5 |
6 | ```objc
7 | label.layer.cornerRadius = 5
8 | label.layer.masksToBounds = true
9 | ```
10 | 首先上面的方式是不可取的,会触发离屏渲染。
11 |
12 |
13 |
14 |
15 | * 如果能够只用 `cornerRadius` 解决问题,就不用优化。
16 |
17 | * 如果必须设置 `masksToBounds`,可以参考圆角视图的数量,如果数量较少(一页只有几个)也可以考虑不用优化。
18 |
19 | * `UIImageView` 的圆角通过直接截取图片实现,其它视图的圆角可以通过 `Core Graphics` 画出圆角矩形实现。
20 |
21 | 
22 |
23 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Bridge/BaseObjectA.m:
--------------------------------------------------------------------------------
1 | //
2 | // BaseObjectA.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/18.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "BaseObjectA.h"
10 |
11 | @implementation BaseObjectA
12 |
13 | /*
14 | A1 --> B1、B2、B3 3种
15 | A2 --> B1、B2、B3 3种
16 | A3 --> B1、B2、B3 3种
17 | */
18 | - (void)handle
19 | {
20 | // override to subclass
21 |
22 | [self.objB fetchData];
23 | }
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Command/Command.h:
--------------------------------------------------------------------------------
1 | //
2 | // Command.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class Command;
12 | typedef void(^CommandCompletionCallBack)(Command* cmd);
13 |
14 | @interface Command : NSObject
15 |
16 | @property (nonatomic, copy) CommandCompletionCallBack completion;
17 |
18 | - (void)execute;
19 | - (void)cancel;
20 | - (void)done;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/性能优化/5.第五题.md:
--------------------------------------------------------------------------------
1 | ## 5.如何有效降低 `APP` 包的大小?
2 |
3 | 降低包大小需要从两方面着手
4 |
5 | ##### 可执行文件
6 |
7 | * 编译器优化
8 | - Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default 设置为 YES
9 | - 去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptions 设置为 NO, Other C Flags 添加 -fno-exceptions
10 | * 利用 AppCode 检测未使用的代码:菜单栏 -> Code -> Inspect Code
11 |
12 | * 编写LLVM插件检测出重复代码、未被调用的代码
13 |
14 |
15 |
16 |
17 | ##### 资源
18 |
19 | > 资源包括 图片、音频、视频 等
20 |
21 | * 优化的方式可以对资源进行无损的压缩
22 | * 去除没有用到的资源: https://github.com/tinymind/LSUnusedResources
--------------------------------------------------------------------------------
/性能优化/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.日常如何检查内存泄露?
2 |
3 | 目前我知道的方式有以下几种
4 |
5 | * Memory Leaks
6 | * Alloctions
7 | * Analyse
8 | * Debug Memory Graph
9 | * MLeaksFinder
10 |
11 | ##### 泄露的内存主要有以下两种:
12 |
13 | * `Laek Memory` 这种是忘记 `Release` 操作所泄露的内存。
14 | * `Abandon Memory` 这种是循环引用,无法释放掉的内存。
15 |
16 |
17 | 上面所说的五种方式,其实前四种都比较麻烦,需要不断地调试运行,第五种是腾讯阅读团队出品,效果好一些,感兴趣的可以看一下这两篇文章:
18 |
19 | - [MLeaksFinder:精准 iOS 内存泄露检测工具](http://wereadteam.github.io/2016/02/22/MLeaksFinder/)
20 | - [MLeaksFinder 新特性](http://wereadteam.github.io/2016/07/20/MLeaksFinder2/)
21 |
22 |
--------------------------------------------------------------------------------
/消息传递的方式/16.第十六题.md:
--------------------------------------------------------------------------------
1 | ## 16.`Block` 和 `函数指针` 的区别?
2 |
3 |
4 | [参考地址](https://blog.csdn.net/dexin5195/article/details/41083323)
5 |
6 | * 1. 函数指针仅仅是一个地址,不具备函数原型信息,没有类型限制,比如一个指向变量的指针同样可以指向一个函数,但是 `block` 作为函数对象,是有部分函数信息的,类型限制更明确。
7 | * 2. `block` 方式便于实现真正的 `“函数式”` 编程,让函数成为基本的运算元,往更远的方向说,真正的函数式语言可以去掉寄存器(请参考冯诺依曼机器基本架构),提高程序的执行效率,近段时间的语言都支持 `lambda` 语法,包括`JS`、 `C++` 、 `Python` 、 `Ruby`等,可见各个编程语言为改进冯诺依曼架构做出的努力和准备。
8 | * 3. 提高程序的健壮性, 定义函数的代码会位于程序的代码段,如果函数内部出现内存溢出,就会直接导致 `crash`,因为代码段是不可写的;`block` 作为函数对象在运行时生成,位于栈内,即使出现内存溢出,一般也不会直接导致 `crash`。
9 |
10 |
--------------------------------------------------------------------------------
/算法集合/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.字符串反转
2 |
3 | ```c
4 | void char_reverse (char *cha) {
5 |
6 | // 定义头部指针
7 | char *begin = cha;
8 | // 定义尾部指针
9 | char *end = cha + strlen(cha) -1;
10 |
11 |
12 | while (begin < end) {
13 |
14 | char temp = *begin;
15 | *(begin++) = *end;
16 | *(end--) = temp;
17 | }
18 | }
19 | ```
20 |
21 |
22 | ###### 使用示例
23 |
24 | ```c
25 | char ch[] = "Hello World";
26 |
27 | char_reverse (ch);
28 |
29 | // 有兴趣的可以验证
30 | printf ("%s",ch);
31 |
32 | ```
33 |
34 |
35 |
--------------------------------------------------------------------------------
/多线程/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.`NSContion`
2 |
3 | ```objc
4 | @interface NSCondition : NSObject {
5 | @private
6 | void *_priv;
7 | }
8 |
9 | - (void)wait;
10 | - (BOOL)waitUntilDate:(NSDate *)limit;
11 | - (void)signal;
12 | - (void)broadcast;
13 |
14 | @property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0);
15 |
16 | @end
17 |
18 | ```
19 |
20 | `NSCondition` 的对象实际上作为一个锁和一个线程检查器,锁上之后其它线程也能上锁,而之后可以根据条件决定是否继续运行线程,即线程是否要进入 `waiting` 状态,经测试,直接进入 `waiting` 状态,当其它线程中的该锁执行 `signal` 或者 `broadcast` 方法时,线程被唤醒,继续运行之后的方法。
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Runtime/14.第十四题.md:
--------------------------------------------------------------------------------
1 | 14.说一下对 `class_ro_t` 的理解?
2 |
3 | 存储了当前类在编译期就已经确定的属性、方法以及遵循的协议。
4 |
5 |
6 | ```objc
7 | struct class_ro_t {
8 | uint32_t flags;
9 | uint32_t instanceStart;
10 | uint32_t instanceSize;
11 | uint32_t reserved;
12 |
13 | const uint8_t * ivarLayout;
14 |
15 | const char * name;
16 | method_list_t * baseMethodList;
17 | protocol_list_t * baseProtocols;
18 | const ivar_list_t * ivars;
19 |
20 | const uint8_t * weakIvarLayout;
21 | property_list_t *baseProperties;
22 | };
23 | ```
24 |
25 |
26 |
--------------------------------------------------------------------------------
/内存管理/12.第十二题.md:
--------------------------------------------------------------------------------
1 | ## 12.`ARC` 在运行时做了哪些工作?
2 |
3 | - 主要是指 `weak` 关键字。`weak` 修饰的变量能够在引用计数为`0` 时被自动设置成 `nil`,显然是有运行时逻辑在工作的。
4 |
5 |
6 | - 为了保证向后兼容性,`ARC` 在运行时检测到类函数中的 `autorelease` 后紧跟其后 `retain`,此时不直接调用对象的 `autorelease` 方法,而是改为调用 `objc_autoreleaseReturnValue`。
7 | `objc_autoreleaseReturnValue` 会检视当前方法返回之后即将要执行的那段代码,若那段代码要在返回对象上执行 `retain` 操作,则设置全局数据结构中的一个标志位,而不执行 `autorelease` 操作,与之相似,如果方法返回了一个自动释放的对象,而调用方法的代码要保留此对象,那么此时不直接执行 `retain` ,而是改为执行 `objc_retainAoutoreleasedReturnValue`函数。此函数要检测刚才提到的标志位,若已经置位,则不执行 `retain` 操作,设置并检测标志位,要比调用 `autorelease` 和`retain `更快。
8 |
9 |
--------------------------------------------------------------------------------
/代码管理/1.1-1.md:
--------------------------------------------------------------------------------
1 | ## 1.`git pull` 和 `git fetch` 的区别?
2 |
3 |
4 | [参考链接](https://blog.csdn.net/u011534057/article/details/77505770)
5 |
6 | 1.概括的讲 `git pull` = `git fetch` + `git merge`
7 |
8 |
9 | `git pull` 会将本地库更新至远程库的最新状态 由于本地库进行了更新,`HEAD` 也会相应的指向最新的`commit id`。
10 |
11 | 2.`git fetch` 的时候只是将 `remote` 的 `origin` 进行 `update` 但是并没有在 `local` 的 `branch` 进行 `merge`。
12 |
13 | 
14 |
15 |
--------------------------------------------------------------------------------
/内存管理/24.第二十四题.md:
--------------------------------------------------------------------------------
1 | ## 24.在 `Obj-C` 中,如何检测内存泄漏?你知道哪些方式?
2 | 目前我知道的方式有以下几种
3 |
4 | * Memory Leaks
5 | * Alloctions
6 | * Analyse
7 | * Debug Memory Graph
8 | * MLeaksFinder
9 |
10 |
11 |
12 | 泄露的内存主要有以下两种:
13 |
14 | * `Laek Memory` 这种是忘记 `Release` 操作所泄露的内存。
15 | * `Abandon Memory` 这种是循环引用,无法释放掉的内存。
16 |
17 |
18 | 上面所说的五种方式,其实前四种都比较麻烦,需要不断地调试运行,第五种是腾讯阅读团队出品,效果好一些,感兴趣的可以看一下这两篇文章:
19 |
20 | - [MLeaksFinder:精准 iOS 内存泄露检测工具](http://wereadteam.github.io/2016/02/22/MLeaksFinder/)
21 | - [MLeaksFinder 新特性](http://wereadteam.github.io/2016/07/20/MLeaksFinder2/)
22 |
23 |
--------------------------------------------------------------------------------
/多线程/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ## 20.`GCD` 与 `NSOperationQueue` 有哪些异同?
2 |
3 |
4 |
5 | * 1> `GCD` 是纯 `C` 语言的 `API` 。`NSOperationQueue` 是基于 `GCD` 的 `OC` 的封装。
6 | * 2> `GCD` 只支持 `FIFO` 队列,`NSOperationQueue` 可以方便设置执行顺序,设置最大的并发数量。
7 | * 3> `NSOperationQueue` 可是方便的设置 `operation` 之间的依赖关系,`GCD` 则需要很多代码。
8 | * 4> `NSOperationQueue` 支持 `KVO`,可以检测 `operation` 是否正在执行`(isExecuted)`,是否结束`(isFinished)`,是否取消`(isCanceled)`
9 | * 5>GCD的执行速度比NSOperationQueue快。
10 |
11 |
12 |
13 | #### 使用场合:
14 |
15 | * 任务之间不太相互依赖:`GCD`
16 |
17 | * 任务之间有依赖或要监听任务的执行情况:`NSOperationQueue`
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/算法集合/冒泡排序.md:
--------------------------------------------------------------------------------
1 | #### 冒泡排序
2 |
3 | ```objc
4 | int a[10] = {3,2,1,4,5,0,6,7,8,9};
5 |
6 | int temp = 0;
7 |
8 | for (int i = 0; i < 10 -1; i++) {
9 |
10 | for (int j = 0; j < 10 - i - 1; j++) {
11 |
12 | if (a[j] > a[j+1]) {
13 |
14 | temp = a[j+1];
15 | a[j+1] = a[j];
16 | a[j] = temp;
17 | }
18 | }
19 | }
20 |
21 | for (int i = 0; i < 10; i++)
22 | {
23 | printf("%i",a[i]);
24 | }
25 | ```
26 |
27 |
--------------------------------------------------------------------------------
/网络/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ## 11.说一下 `OSI` 七层模型的协议?
2 | - 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
3 | - 表示层 数据格式化,代码转换,数据加密 没有协议
4 | - 会话层 解除或建立与别的接点的联系 没有协议
5 | - 传输层 提供端对端的接口 TCP,UDP
6 | - 网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
7 | - 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
8 | - 物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
9 |
10 |
11 | 
12 |
13 |
14 | 
15 |
16 |
--------------------------------------------------------------------------------
/多线程/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.`NSLock`
2 |
3 | > `NSLock` 遵循 `NSLocking` 协议,`lock` 方法是加锁,`unlock` 是解锁,`tryLock` 是尝试加锁,如果失败的话返回 NO,`lockBeforeDate:` 是在指定 `Date` 之前尝试加锁,如果在指定时间之前都不能加锁,则返回 `NO`。
4 |
5 | ```objc
6 | @protocol NSLocking
7 |
8 | - (void)lock;
9 | - (void)unlock;
10 |
11 | @end
12 |
13 | @interface NSLock : NSObject {
14 | @private
15 | void *_priv;
16 | }
17 |
18 | - (BOOL)tryLock;
19 | - (BOOL)lockBeforeDate:(NSDate *)limit;
20 |
21 | @property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0);
22 |
23 | @end
24 | ```
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Foundation/6.第六题.md:
--------------------------------------------------------------------------------
1 | ## 6.`id` 和 `instanceType` 有什么区别?
2 |
3 |
4 | ##### 相同点
5 | `instancetype` 和 `id` 都是万能指针,指向对象。
6 |
7 |
8 | ##### 不同点:
9 |
10 | - 1.`id` 在编译的时候不能判断对象的真实类型,`instancetype` 在编译的时候可以判断对象的真实类型。
11 | - 2.`id` 可以用来定义变量,可以作为返回值类型,可以作为形参类型;`instancetype` 只能作为返回值类型。
12 |
13 |
14 |
15 |
16 |
17 | ###### 区别1:
18 |
19 | 在 ARC 环境下:
20 |
21 | instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型.
22 |
23 | 在 MRC 环境下:
24 |
25 | instancetype 和 id 一样,不做具体类型检查
26 |
27 | ###### 区别2:
28 |
29 | id可以作为方法的参数,但instancetype不可以
30 |
31 | instancetype 只适用于初始化方法和便利构造器的返回值类型
32 |
--------------------------------------------------------------------------------
/其他问题/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## 4.说一下对 `APNS` 的认识?
2 |
3 | 我写过三篇关于推送框架的总结:
4 |
5 | * 第一篇:http://xiaolu520.com/2017/06/08/WWDC2016-Session707%EF%BC%88UNNotifications%EF%BC%89/
6 | * 第二篇:http://xiaolu520.com/2017/06/09/WWDC2016-Session708%EF%BC%88%E9%AB%98%E7%BA%A7%E9%80%9A%E7%9F%A5%EF%BC%89/
7 | * 第三篇:http://xiaolu520.com/2017/06/12/WWDC2016-Session724%EF%BC%88APNS%E6%96%B0%E7%89%B9%E6%80%A7%EF%BC%89/
8 |
9 | 以前的通知基于 `Socket` ,但是不稳定。新的通知框架基于 `Http` 。
10 |
11 | 设备的唯一识别码,程序的BundleID,通过长连接发给 `APNS` 服务器,返回一个 `DeviceToken`。把这个 `DeviceToken` 发给服务器,以后服务器把 `DeviceToken` 和 通知的内容发给 `APNS` 就可以了。
12 |
13 |
14 |
--------------------------------------------------------------------------------
/设计模式/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 1.编程中的六大设计原则?
2 |
3 | ##### 1.单一职责原则
4 | 通俗地讲就是一个类只做一件事
5 |
6 | * `CALayer`:动画和视图的显示。
7 | * `UIView`:只负责事件传递、事件响应。
8 |
9 | ##### 2.开闭原则
10 |
11 | 对修改关闭,对扩展开放。
12 | 要考虑到后续的扩展性,而不是在原有的基础上来回修改
13 |
14 | ##### 3.接口隔离原则
15 |
16 | 使用多个专门的协议、而不是一个庞大臃肿的协议
17 |
18 | * `UITableviewDelegate`
19 | * `UITableViewDataSource`
20 |
21 | ##### 4.依赖倒置原则
22 |
23 | 抽象不应该依赖于具体实现、具体实现可以依赖于抽象。
24 | 调用接口感觉不到内部是如何操作的
25 |
26 | ##### 5.里氏替换原则
27 |
28 | 父类可以被子类无缝替换,且原有的功能不受任何影响
29 |
30 | 例如 KVO
31 |
32 |
33 | ##### 6.迪米特法则
34 |
35 | 一个对象应当对其他对象尽可能少的了解,实现高聚合、低耦合
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Runloop/7.第七题.md:
--------------------------------------------------------------------------------
1 | ## 7.解释一下 `事件响应` 的过程?
2 |
3 | 苹果注册了一个 `Source1` (基于 `mach port` 的) 用来接收系统事件,其回调函数为 `__IOHIDEventSystemClientQueueCallback()`。
4 |
5 | 当一个硬件事件(触摸/锁屏/摇晃等)发生后,首先由 `IOKit.framework` 生成一个 `IOHIDEvent` 事件并由 `SpringBoard` 接收。这个过程的详细情况可以参考这里。`SpringBoard` 只接收按键(锁屏/静音等),触摸,加速,接近传感器等几种 `Event`,随后用 `mach port` 转发给需要的 `App` 进程。随后苹果注册的那个 `Source1` 就会触发回调,并调用 `_UIApplicationHandleEventQueue()` 进行应用内部的分发。
6 |
7 | `_UIApplicationHandleEventQueue()` 会把 `IOHIDEvent` 处理并包装成 `UIEvent` 进行处理或分发,其中包括识别 `UIGesture`/处理屏幕旋转/发送给 `UIWindow` 等。通常事件比如 `UIButton 点击`、`touchesBegin/Move/End/Cancel` 事件都是在这个回调中完成的。
8 |
9 |
--------------------------------------------------------------------------------
/Foundation/3.第三题.md:
--------------------------------------------------------------------------------
1 | ## 3.如何定义一台 `iOS` 设备的唯一性?
2 | * 1.`IMEI`:国际移动设备身份码,iOS 5 以后苹果不再允许获取 IMEI
3 | * 2.`UDID`: iOS 设备的唯一识别码,在 iOS 6(2013 年 5 月 ) 以后被 Apple 禁止
4 | * 3.`IDFA`:广告标识符,每台设备的唯一ID。用户可以禁止、重置、还原,iOS 6提出。
5 | * 4.`MAC地址`:网络唯一标识符,iOS 7 之后
6 | * 5.`UUID`:(Universally Unique IDentifier):通用唯一识别码,NSUUID 每次获取的值都会发生变化,但是它会保持唯一性
7 | * 6.`IDFV`:Vendor 标示符,也被称为厂商标识符。只要用户的设备中没有卸载当前 Vendor 的所有 APP,则不会发生变化。什么是 Vendor ?可以理解成 bundleID 的前两部分
8 |
9 | 结论:2017 年的我们想要通过 `UDID`、`Mac` 地址、`OpenUDID` 来定位用户设备已经是不可能啦,因为它们要么是无效,要么是受到了 `App Store` 的限制。但是如果你想要追踪广告的话,可以使用 `IDFA`,想要用来分析用户行为可以使用 `IDFV + KeyChain` 来解决。
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/内存管理/1.第一题.md:
--------------------------------------------------------------------------------
1 | ## 讲一下 `iOS` 内存管理的理解
2 |
3 | 实际上是三种方案的结合
4 |
5 | * 1.TaggedPointer(针对类似于 `NSNumber` 的小对象类型)
6 | * 2.NONPOINTER_ISA(64位系统下)
7 | - 第一位的 `0` 或 `1` 代表是纯地址型 `isa` 指针,还是 `NONPOINTER_ISA` 指针。
8 | - 第二位,代表是否有关联对象
9 | - 第三位代表是否有 `C++` 代码。
10 | - 接下来33位代表指向的内存地址
11 | - 接下来有 `弱引用` 的标记
12 | - 接下来有是否 `delloc` 的标记....等等
13 | * 3.散列表(引用计数表、weak表)
14 | - `SideTables` 表在 非嵌入式的64位系统中,有 64张 `SideTable` 表
15 | - 每一张 `SideTable` 主要是由三部分组成。`自旋锁`、`引用计数表`、`弱引用表`。
16 | - 全局的 `引用计数` 之所以不存在同一张表中,是为了避免资源竞争,解决效率的问题。
17 | - `引用计数表` 中引入了 `分离锁`的概念,将一张表分拆成多个部分,对他们分别加锁,可以实现并发操作,提升执行效率
18 |
19 |
--------------------------------------------------------------------------------
/UIKit/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 10.`UIViewController` 的生命周期?
2 |
3 |
4 | 可以参考一下[这篇文章](https://www.jianshu.com/p/4a62c10a36f1)
5 |
6 |
7 | ```objc
8 | -[ViewController initWithCoder:]
9 | -[ViewController awakeFromNib]
10 | -[ViewController loadView]
11 | -[ViewController viewDidLoad]
12 | -[ViewController viewWillAppear:]
13 | -[ViewController viewWillLayoutSubviews]
14 | -[ViewController viewDidLayoutSubviews]
15 | -[ViewController viewDidAppear:]
16 | -[ViewController viewWillDisappear:]
17 | -[ViewController viewDidDisappear:]
18 | -[ViewController dealloc]
19 | -[ViewController didReceiveMemoryWarning]
20 | ```
21 |
22 |
23 |
--------------------------------------------------------------------------------
/网络/26.第二十六题.md:
--------------------------------------------------------------------------------
1 | ## 26.说一下用户数据报协议 - `UDP` ?
2 |
3 | ### 特点
4 |
5 | ###### 1.无连接
6 | 不需要事先建立连接,也不需要释放
7 |
8 | ###### 2.尽最大努力交付
9 | 不保证可靠传输
10 |
11 | ###### 3.面向报文
12 | 既不合并,也不拆分
13 |
14 | 
15 |
16 | ### 功能
17 |
18 | ###### 1.复用、分用
19 |
20 | 多端口复用-不管从哪个端口发送出去,都可以复用传输层的数据报
21 |
22 | 根据目标端口可以进行数据分发
23 |
24 | 
25 |
26 | ###### 2.差错检测
27 |
28 | 即时通讯项目要保证消息的准确性
29 |
30 | 
31 |
32 |
--------------------------------------------------------------------------------
/Runtime/5.第五题.md:
--------------------------------------------------------------------------------
1 | 5.如何给 `Category` 添加属性?关联对象以什么形式进行存储?
2 |
3 | 查看的是 `关联对象` 的知识点。
4 |
5 | 详细的说一下 `关联对象`。
6 |
7 | `关联对象` 以哈希表的格式,存储在一个全局的单例中。
8 |
9 |
10 |
11 | ```objc
12 | @interface NSObject (Extension)
13 |
14 | @property (nonatomic,copy ) NSString *name;
15 |
16 | @end
17 |
18 |
19 | @implementation NSObject (Extension)
20 |
21 | - (void)setName:(NSString *)name {
22 |
23 | objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
24 | }
25 |
26 |
27 | - (NSString *)name {
28 |
29 | return objc_getAssociatedObject(self,@selector(name));
30 | }
31 |
32 | @end
33 | ```
34 |
35 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Command/CommandManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // CommandManager.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "Command.h"
11 | @interface CommandManager : NSObject
12 |
13 | // 命令管理容器
14 | @property (nonatomic, strong) NSMutableArray *arrayCommands;
15 |
16 | // 命令管理者以单例方式呈现
17 | + (instancetype)sharedInstance;
18 |
19 | // 执行命令
20 | + (void)executeCommand:(Command *)cmd completion:(CommandCompletionCallBack)completion;
21 |
22 | // 取消命令
23 | + (void)cancelCommand:(Command *)cmd;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/Foundation/11.第十一题.md:
--------------------------------------------------------------------------------
1 | ## 11.`Obj-C` 中的反射机制了解吗?
2 |
3 |
4 | 结合 `Runtime` 看这里。
5 |
6 | ```objc
7 | // SEL和字符串转换
8 | FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
9 | FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
10 | // Class和字符串转换
11 | FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
12 | FOUNDATION_EXPORT Class __nullable NSClassFromString(NSString *aClassName);
13 | // Protocol和字符串转换
14 | FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
15 | FOUNDATION_EXPORT Protocol * __nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);
16 | ```
17 |
18 |
19 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPatten/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 |
11 | @interface ViewController ()
12 |
13 | @end
14 |
15 | @implementation ViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | // Do any additional setup after loading the view, typically from a nib.
20 | }
21 |
22 |
23 | - (void)didReceiveMemoryWarning {
24 | [super didReceiveMemoryWarning];
25 | // Dispose of any resources that can be recreated.
26 | }
27 |
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/Runloop/6.第六题.md:
--------------------------------------------------------------------------------
1 | 6.`autoreleasePool` 在何时被释放?
2 |
3 | `App`启动后,苹果在主线程 `RunLoop` 里注册了两个 `Observer`,其回调都是 `_wrapRunLoopWithAutoreleasePoolHandler()`。
4 |
5 | 第一个 `Observer` 监视的事件是 `Entry(即将进入Loop)`,其回调内会调用 `_objc_autoreleasePoolPush()` 创建自动释放池。其 `order` 是 `-2147483647`,优先级最高,保证创建释放池发生在其他所有回调之前。
6 |
7 | 第二个 `Observer` 监视了两个事件: `BeforeWaiting`(准备进入休眠) 时调用`_objc_autoreleasePoolPop()` 和 `_objc_autoreleasePoolPush()` 释放旧的池并创建新池;`Exit`(即将退出Loop) 时调用 `_objc_autoreleasePoolPop()` 来释放自动释放池。这个 `Observer` 的 `order` 是 `2147483647`,优先级最低,保证其释放池子发生在其他所有回调之后。
8 |
9 | 在主线程执行的代码,通常是写在诸如事件回调、`Timer`回调内的。这些回调会被 `RunLoop` 创建好的 `AutoreleasePool` 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 `Pool` 了。
10 |
11 |
12 |
--------------------------------------------------------------------------------
/内存管理/20.第二十题.md:
--------------------------------------------------------------------------------
1 | ## 20 `autoReleasePool` 什么时候释放?
2 |
3 | `App`启动后,苹果在主线程 `RunLoop` 里注册了两个 `Observer`,其回调都是 `_wrapRunLoopWithAutoreleasePoolHandler()`。
4 |
5 | 第一个 `Observer` 监视的事件是 `Entry(即将进入Loop)`,其回调内会调用 `_objc_autoreleasePoolPush()` 创建自动释放池。其 `order` 是 `-2147483647`,优先级最高,保证创建释放池发生在其他所有回调之前。
6 |
7 | 第二个 `Observer` 监视了两个事件: `BeforeWaiting`(准备进入休眠) 时调用`_objc_autoreleasePoolPop()` 和 `_objc_autoreleasePoolPush()` 释放旧的池并创建新池;`Exit`(即将退出Loop) 时调用 `_objc_autoreleasePoolPop()` 来释放自动释放池。这个 `Observer` 的 `order` 是 `2147483647`,优先级最低,保证其释放池子发生在其他所有回调之后。
8 |
9 | 在主线程执行的代码,通常是写在诸如事件回调、`Timer`回调内的。这些回调会被 `RunLoop` 创建好的 `AutoreleasePool` 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 `Pool` 了。
10 |
11 |
12 |
--------------------------------------------------------------------------------
/内存管理/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ## 21.`retain`、`release` 的实现机制?
2 |
3 |
4 | #### 1.`Retain`的实现机制。
5 |
6 | ```c
7 | SideTable& table = SideTables()[This];
8 |
9 | size_t& refcntStorage = table.refcnts[This];
10 |
11 | refcntStorage += SIZE_TABLE_RC_ONE;
12 | ```
13 |
14 |
15 |
16 |
17 | #### 2.`Release`的实现机制。
18 |
19 | ```c
20 | SideTable& table = SideTables()[This];
21 |
22 | size_t& refcntStorage = table.refcnts[This];
23 |
24 | refcntStorage -= SIZE_TABLE_RC_ONE;
25 | ```
26 |
27 |
28 |
29 | 二者的实现机制类似,概括讲就是通过第一层 `hash` 算法,找到 `指针变量` 所对应的 `sideTable`。然后再通过一层 `hash` 算法,找到存储 `引用计数` 的 `size_t`,然后对其进行增减操作。`retainCount` 不是固定的 1,`SIZE_TABLE_RC_ONE` 是一个宏定义,实际上是一个值为 4 的偏移量。
30 |
31 |
32 |
--------------------------------------------------------------------------------
/网络/18.第十八题.md:
--------------------------------------------------------------------------------
1 | ## 18.`DNS` 的解析过程?网络的 `DNS` 优化。
2 |
3 |
4 | > `DNS` 是域名到 `IP` 地址的映射,`DNS` 解析使用 `UDP` 数据报,端口号53,并且采用明文传输的方式
5 |
6 | 客户端在向服务端发送请求时,会先将 `域名` 到 `DNS` 服务器映射出 `IP` 地址,然后再访问。
7 |
8 | #### `DNS` 解析的两种方式
9 |
10 | ###### 递归查询
11 | 不断地自下而上遍历解析,“我去给你问一下”的方式
12 |
13 | ###### 迭代查询
14 | 迭代查询 是 “我告诉你谁可能知道”的方式
15 |
16 |
17 |
18 | #### `DNS` 解析存在的问题
19 |
20 | ###### `DNS` 劫持
21 |
22 | 被钓鱼网站劫持,有可能返回错误的 `IP`,浏览的不是目标浏览器
23 |
24 | ###### `DNS` 解析转发
25 | 晓得运营商可能将 `DNS` 解析请求转发,解析的比较慢,效率低
26 |
27 |
28 | #### `DNS` 劫持解决办法
29 |
30 | ###### httpDNS
31 | 使用 `http` 协议向 `DNS` 服务器 80 端口进行请求
32 |
33 | ###### 长连接
34 |
35 | 找一个中间的长连 `server` ,在内网专线进行 `Http` 请求。客户端和这个长连 `server`通信即可。
36 |
37 |
38 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Responder/BusinessObject.h:
--------------------------------------------------------------------------------
1 | //
2 | // BusinessObject.h
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class BusinessObject;
12 |
13 | typedef void(^CompletionBlock)(BOOL handled);
14 | typedef void(^ResultBlock)(BusinessObject *handler, BOOL handled);
15 |
16 | @interface BusinessObject : NSObject
17 |
18 | // 下一个响应者(响应链构成的关键)
19 | @property (nonatomic, strong) BusinessObject *nextBusiness;
20 | // 响应者的处理方法
21 | - (void)handle:(ResultBlock)result;
22 |
23 | // 各个业务在该方法当中做实际业务处理
24 | - (void)handleBusiness:(CompletionBlock)completion;
25 | @end
26 |
--------------------------------------------------------------------------------
/网络/25.第二十五题.md:
--------------------------------------------------------------------------------
1 | ## 25.说一下传输控制协议 - `TCP` ?
2 |
3 | #### 1.面向连接
4 | 数据传输开始之前,需要建立连接,例如 `三次握手` 和 `四次挥手`。
5 |
6 | #### 2.可靠传输
7 |
8 | - 无差错
9 | - 不丢失
10 | - 不重复
11 | - 按序到达(滑动窗口协议实现的)
12 |
13 | 停止等待协议
14 | - 无差错情况
15 | - 超时重传
16 | - 确认丢失
17 | - 确认迟到
18 |
19 | #### 3.面向字节流
20 | 可以对照 `UDP` 的面向报文,字节由 `TCP` 控制
21 |
22 | 
23 |
24 | #### 4.流量控制
25 |
26 | 滑动窗口协议
27 |
28 | 
29 |
30 | #### 5.拥塞控制
31 |
32 | - 慢开始,拥塞避免
33 | - 快恢复、快重传
34 |
35 | 
36 |
37 |
--------------------------------------------------------------------------------
/Runtime/12.第十二题.md:
--------------------------------------------------------------------------------
1 | 12.一个 `NSObject` 对象占用多少内存空间?
2 |
3 | 受限于内存分配的机制,一个 `NSObject`对象都会分配 `16Bit` 的内存空间。
4 |
5 | 但是实际上在 64位 下,只使用了 `8bit`;
6 | 在32位下,只使用了 `4bit`
7 |
8 | 一个 NSObject 实例对象成员变量所占的大小,实际上是 8KB
9 | ```objc
10 | #import
11 | Class_getInstanceSize([NSObject Class])
12 | ```
13 |
14 | 本质是
15 | ```objc
16 | size_t class_getInstanceSize(Class cls)
17 | {
18 | if (!cls) return 0;
19 | return cls->alignedInstanceSize();
20 | }
21 | ```
22 |
23 | 获取 Obj-C 指针所指向的内存的大小,实际上是16KB
24 | ```objc
25 | #import
26 | malloc_size((__bridge const void *)obj);
27 | ```
28 |
29 |
30 | 对象在分配内存空间时,会进行内存对齐,所以在 iOS 中,分配内存空间都是 16字节 的倍数。
31 |
32 |
33 |
34 | 可以通过以下网址 :openSource.apple.com/tarballs 来查看源代码。
--------------------------------------------------------------------------------
/网络/8.第八题.md:
--------------------------------------------------------------------------------
1 | ## 8.什么是 `Mimetype` ?
2 | 在浏览器中显示的内容有 `HTML`、有 `XML`、有 `GIF`、还有 `Flash` ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 `MIME Type`,也就是该资源的媒体类型。
3 |
4 |
5 |
6 | ```objc
7 | //向该文件发送请求,根据请求头拿到该文件的MIMEType
8 | -(NSString *)getMIMETypeURLRequestAtPath:(NSString*)path
9 | {
10 | //1.确定请求路径
11 | NSURL *url = [NSURL fileURLWithPath:path];
12 |
13 | //2.创建可变的请求对象
14 | NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
15 |
16 | //3.发送请求
17 | NSHTTPURLResponse *response = nil;
18 | [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
19 |
20 | NSString *mimeType = response.MIMEType;
21 | return mimeType;
22 | }
23 |
24 | ```
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/代码管理/3.3-7.md:
--------------------------------------------------------------------------------
1 | ## 7.如何使用 `CocoaPods` 集成远程私有库?
2 |
3 | ###### 1.建立一个远程的私有索引库
4 | 在 `GitLab` 建立一个私有的代码仓库,暂时可以将它理解为一个空白的容器。
5 |
6 | ###### 2.通过 pod repo add 添加索引库
7 |
8 | ```objc
9 | pod repo add GZQBaseRepo 仓库地址
10 | ```
11 |
12 | ###### 3.创建远程私有代码库
13 |
14 | * 建立模板
15 |
16 | ```objc
17 | pod lib create
18 | ```
19 |
20 | * 将外界需要集成的代码拷贝到 `Classes` 文件夹下。
21 | * 在 `Example` 路径下执行 `pod install` 安装 。
22 | * 将本地代码上传至 Git 服务器。
23 | * 对版本信息打上 `Tag`。
24 |
25 | ###### 4.修改 `podspec` 文件,进行本地和远程校验
26 |
27 | ```objc
28 | pod lib lint 本地校验
29 | pod spec lint 远程校验
30 | ```
31 |
32 | ###### 5.将 `podspec` 文件 push 到远程私有索引库
33 |
34 | ```objc
35 | pod repo push 路径文件 xxxx.podspec
36 | ```
37 |
38 | ###### 6.在本地 `Podfile` 中,同时引入新建的远程私有索引库 和 官方库即可安装使用
39 |
40 |
--------------------------------------------------------------------------------
/Runloop/10.第十题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 10.解释一下 `NSTimer`。
4 |
5 | `NSTimer` 其实就是 `CFRunLoopTimerRef`,他们之间是 `toll-free bridged` 的。一个 `NSTimer` 注册到 `RunLoop` 后,`RunLoop` 会为其重复的时间点注册好事件。例如 `10:00`, `10:10`, `10:20` 这几个时间点。`RunLoop` 为了节省资源,并不会在非常准确的时间点回调这个`Timer`。`Timer` 有个属性叫做 `Tolerance` (宽容度),标示了当时间点到后,容许有多少最大误差。
6 |
7 | 如果某个时间点被错过了,例如执行了一个很长的任务,则那个时间点的回调也会跳过去,不会延后执行。就比如等公交,如果 10:10 时我忙着玩手机错过了那个点的公交,那我只能等 10:20 这一趟了。
8 |
9 | `CADisplayLink` 是一个和屏幕刷新率一致的定时器(但实际实现原理更复杂,和 NSTimer 并不一样,其内部实际是操作了一个 `Source`)。如果在两次屏幕刷新之间执行了一个长任务,那其中就会有一帧被跳过去(和 `NSTimer` 相似),造成界面卡顿的感觉。在快速滑动 `TableView` 时,即使一帧的卡顿也会让用户有所察觉。`Facebook` 开源的 `AsyncDisplayLink` 就是为了解决界面卡顿的问题,其内部也用到了 `RunLoop`。
10 |
11 |
12 | ## `NSTimer` 循环引用示例
13 |
14 | 
15 |
16 |
--------------------------------------------------------------------------------
/UIKit/7.第七题.md:
--------------------------------------------------------------------------------
1 |
2 | ## 7.说一下控制器 `View` 的生命周期,一旦收到内存警告会如何处理?
3 |
4 | 
5 |
6 |
7 |
8 | 当系统内存告急时,会接收到`didReceiveMemoryWarning`。 这是属于 `ViewController` 的方法,当`ViewController` 接收到`didReceiveMemoryWarning`,首先会判断当前的 `ViewController` 是否还显示在 `window`上,如果不在就会移除当前的 `ViewController`,销毁`ViewController` 上面的子控件,并执行 `ViewDidUnload` 方法。
9 |
10 | 
11 |
12 |
--------------------------------------------------------------------------------
/内存管理/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ## 23.在 `MRC` 下如何重写属性的 `Setter` 和 `Getter`?
2 |
3 | ###### setter
4 | ```objc
5 | -(void)setBrand:(NSString *)brand{
6 | //如果实例变量指向的地址和参数指向的地址不同
7 | if (_brand != brand)
8 | {
9 | //将实例变量的引用计数减一
10 | [_brand release];
11 | //将参数变量的引用计数加一,并赋值给实例变量
12 | _brand = [brand retain];
13 | }
14 | }
15 | ```
16 |
17 |
18 | ###### getter
19 |
20 | ```objc
21 | -(NSString *)brand{
22 | //将实例变量的引用计数加1后,添加自动减1
23 | //作用,保证调用getter方法取值时可以取到值的同时在完全不需要使用后释放
24 | return [[_brand retain] autorelease];
25 | }
26 | ```
27 |
28 | ###### 重写dealloc
29 |
30 | ```objc
31 | //MRC下 手动释放内存 可重写dealloc但不要调用dealloc 会崩溃
32 | -(void)dealloc{
33 | [_string release];
34 | //必须最后调用super dealloc
35 | [super dealloc];
36 | }
37 | ```
38 |
39 |
40 |
--------------------------------------------------------------------------------
/代码管理/1.1-4.md:
--------------------------------------------------------------------------------
1 | ## 4.如果 `fork` 了一个别人的仓库,怎样与源仓库保持同步?
2 |
3 |
4 | 参考该[链接](https://blog.csdn.net/godwei_ding/article/details/78756688)
5 |
6 |
7 | ###### 1:fork源仓库
8 | ###### 2:clone到本地
9 |
10 | ```objc
11 | git clone git@github.com:username/repositoryname.git
12 | ```
13 |
14 |
15 | ###### 3:添加源仓库路径
16 |
17 | ```objc
18 | git remote add upstream https://github.com/owername/pouch.git
19 | ```
20 |
21 | ###### 4:源仓库路径设置
22 |
23 | ```objc
24 | git remote set-url --push upstream no-pushing
25 | ```
26 |
27 | ###### 5:获取源仓库的最新commit
28 |
29 | ```objc
30 | git fetch upstream
31 | ```
32 |
33 | ###### 6:将最新commit合并到本地
34 |
35 | ```objc
36 | git merge upstream/master
37 | ```
38 |
39 | ###### 7:将本地代码pull到自己的github
40 |
41 | ```objc
42 | git pull
43 | ```
44 |
45 | 这时三个仓库就已经保持同步了。
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/数据结构/1.1-4.md:
--------------------------------------------------------------------------------
1 | ## 4.如果 `fork` 了一个别人的仓库,怎样与源仓库保持同步?
2 |
3 |
4 | 参考该[链接](https://blog.csdn.net/godwei_ding/article/details/78756688)
5 |
6 |
7 | ###### 1:fork源仓库
8 | ###### 2:clone到本地
9 |
10 | ```objc
11 | git clone git@github.com:username/repositoryname.git
12 | ```
13 |
14 |
15 | ###### 3:添加源仓库路径
16 |
17 | ```objc
18 | git remote add upstream https://github.com/owername/pouch.git
19 | ```
20 |
21 | ###### 4:源仓库路径设置
22 |
23 | ```objc
24 | git remote set-url --push upstream no-pushing
25 | ```
26 |
27 | ###### 5:获取源仓库的最新commit
28 |
29 | ```objc
30 | git fetch upstream
31 | ```
32 |
33 | ###### 6:将最新commit合并到本地
34 |
35 | ```objc
36 | git merge upstream/master
37 | ```
38 |
39 | ###### 7:将本地代码pull到自己的github
40 |
41 | ```objc
42 | git pull
43 | ```
44 |
45 | 这时三个仓库就已经保持同步了。
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/多线程/21.第二十一题.md:
--------------------------------------------------------------------------------
1 | ## 21.解释一下多线程中的死锁?
2 |
3 |
4 |
5 | 死锁是由于多个线程(进程)在执行过程中,因为争夺资源而造成的互相等待现象,你可以理解为卡主了。产生死锁的必要条件有四个:
6 |
7 | - 互斥条件 : 指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
8 | - 请求和保持条件 : 指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
9 | - 不可剥夺条件 : 指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
10 | - 环路等待条件 : 指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
11 |
12 |
13 | ```objc
14 | dispatch_sync(dispatch_get_main_queue(), ^{
15 | NSLog(@"2");
16 | });
17 |
18 | NSLog(@"1");
19 | // 什么也不会打印,直接报错
20 | ```
21 |
22 |
23 | 最常见的就是 `同步函数` + `主队列` 的组合,本质是队列阻塞。
24 |
25 |
26 | 有兴趣研究一下的可以参考[这篇文章](https://www.jianshu.com/p/bbabef8aa1fe),还有[这篇文章](https://juejin.im/post/5b1cf4fa6fb9a01e4b062771)
27 |
28 |
--------------------------------------------------------------------------------
/算法集合/9.第九题.md:
--------------------------------------------------------------------------------
1 | 9.白鼠与毒酒的算法问题。
2 |
3 |
4 | [原文链接](http://www.iteye.com/problems/40956)
5 |
6 | 设有 `N` 桶酒,有一桶是毒酒,编号从`0` 到 `N-1`,最少要 `K` 只白鼠,显然:
7 |
8 | ```objc
9 | 当N=2,K=1
10 | 当N=3,K=2
11 | 当N=4,K=2
12 | 4桶酒编号0,1,2,3
13 | K=2,设有白鼠A和白鼠B
14 | A喝0,1,B喝0,2
15 | 一星期后,有4种可能状态
16 | A死B死(0号有毒),A死B活(1号有毒),A活B死(2号有毒),A活B活(3号有毒)
17 | ```
18 |
19 | 猜想白鼠的最终状态只有死活两种可能,通过白鼠一星期后的状态可以算出毒酒编号
20 |
21 |
22 | 很自然想到二进制,例如:
23 |
24 | ```objc
25 | 当N=4时,0=00,1=01,2=10,3=11
26 | 当N=8,K=3
27 | 0=000,1=001,2=010,3=011,4=100,5=101,6=110,7=111
28 | 白鼠A,B,C
29 | A喝0,1,2,3 (0XX)
30 | B喝0,1,4,5 (X0X)
31 | C喝0,2,4,6 (XX0)
32 | ABC的最终状态可以确定毒酒编号
33 | 当N=1000时,可以类推至少要10只,你可以这样推出这10只白鼠具体是喝哪些编号的酒,规律很明显了
34 | ```
35 |
36 | 回过来再想想,1000之内的任意一个数都可以用一个10位的二进制数表示(不够的话前面补0),白鼠与数位对应,第几位为0,则说明第几位的白鼠死了,而这个二进制的编号即为毒酒编号
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/网络/27.第二十七题.md:
--------------------------------------------------------------------------------
1 | ## 27.谈一谈网络中的 `session` 和 `cookie`?
2 |
3 | 因为 `Http` 无状态的特性,如果需要判断是哪个用户,这时就需要 `Cookie` 和 `Session`。
4 |
5 | `Cookie` 存储在客户端,用来记录用户状态,区分用户。一般都是服务端把生成的 `Cookie` 通过响应返回给客户端,客户端保存。
6 |
7 | `Session` 存储在网络端,需要依赖 `Cookie` 机制。服务端生成了 `Session` 后,返回给客户端,客户端 `setCookie:sessionID`,所以下次请求的时候,客户端把 `Cookie` 发送给服务端,服务端解析出 `SessionID`,在服务端根据 `SessionID` 判断当前的用户。
8 |
9 | #### 如何修改 `Cookie`?
10 |
11 | * 相同 `Key` 值得新的 `Cookie` 会覆盖旧的 `Cookie`.
12 |
13 | * 覆盖规则是 name path 和 domain 等需要与原有的一致
14 |
15 | #### 如何删除 `Cookie`?
16 |
17 | * 相同 `Key` 值得新的 `Cookie` 会覆盖旧的 `Cookie`.
18 |
19 | * 覆盖规则是 name path 和 domain 等需要与原有的一致
20 |
21 | * 设置 `Cookie` 的 `expires` 为过去的一个时间点,或者 `maxAge = 0`
22 |
23 | #### 如何保证 `Cookie` 的安全?
24 |
25 | - 对 `Cookie` 进行加密处理
26 | - 只在 `Https` 上携带 `Cookie`。
27 | - 设置 `Cookie` 为 `httpOnly`,防止跨站脚本攻击。
28 |
29 |
30 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/Command/Command.m:
--------------------------------------------------------------------------------
1 | //
2 | // Command.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "Command.h"
10 | #import "CommandManager.h"
11 | @implementation Command
12 |
13 | - (void)execute{
14 |
15 | //override to subclass;
16 |
17 | [self done];
18 | }
19 |
20 | - (void)cancel{
21 |
22 | self.completion = nil;
23 | }
24 |
25 | - (void)done
26 | {
27 | dispatch_async(dispatch_get_main_queue(), ^{
28 |
29 | if (_completion) {
30 | _completion(self);
31 | }
32 |
33 | //释放
34 | self.completion = nil;
35 |
36 | [[CommandManager sharedInstance].arrayCommands removeObject:self];
37 | });
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/DesignPattenUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/设计模式/DesignPatten/SingleInstance/Mooc.m:
--------------------------------------------------------------------------------
1 | //
2 | // Mooc.m
3 | // DesignPatten
4 | //
5 | // Created by yangyang38 on 2018/3/17.
6 | // Copyright © 2018年 yangyang. All rights reserved.
7 | //
8 |
9 | #import "Mooc.h"
10 |
11 | @implementation Mooc
12 |
13 | + (id)sharedInstance
14 | {
15 | // 静态局部变量
16 | static Mooc *instance = nil;
17 |
18 | // 通过dispatch_once方式 确保instance在多线程环境下只被创建一次
19 | static dispatch_once_t onceToken;
20 | dispatch_once(&onceToken, ^{
21 | // 创建实例
22 | instance = [[super allocWithZone:NULL] init];
23 | });
24 | return instance;
25 | }
26 |
27 | // 重写方法【必不可少】
28 | + (id)allocWithZone:(struct _NSZone *)zone{
29 | return [self sharedInstance];
30 | }
31 |
32 | // 重写方法【必不可少】
33 | - (id)copyWithZone:(nullable NSZone *)zone{
34 | return self;
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/内存管理/10.第十题.md:
--------------------------------------------------------------------------------
1 | ## 10.说一下对 `retain`,`copy`,`assign`,`weak`,`_Unsafe_Unretain` 关键字的理解。
2 |
3 |
4 | ###### Strong
5 | > `Strong` 修饰符表示指向并持有该对象,其修饰对象的引用计数会加1。该对象只要引用计数不为0就不会被销毁。当然可以通过将变量强制赋值 `nil` 来进行销毁。
6 |
7 |
8 | ###### Weak
9 | > `weak` 修饰符指向但是并不持有该对象,引用计数也不会加1。在 `Runtime` 中对该属性进行了相关操作,无需处理,可以自动销毁。`weak`用来修饰对象,多用于避免循环引用的地方。`weak` 不可以修饰基本数据类型。
10 |
11 | ###### assign
12 | > `assign`主要用于修饰基本数据类型,
13 | 例如`NSInteger`,`CGFloat`,存储在栈中,内存不用程序员管理。`assign`是可以修饰对象的,但是会出现问题。
14 |
15 |
16 | ###### copy
17 | > `copy`关键字和 `strong`类似,`copy` 多用于修饰有可变类型的不可变对象上 `NSString`,`NSArray`,`NSDictionary`上。
18 |
19 | ###### __unsafe_unretain
20 | > `__unsafe_unretain` 类似于 `weak` ,但是当对象被释放后,指针已然保存着之前的地址,被释放后的地址变为 `僵尸对象`,访问被释放的地址就会出问题,所以说他是不安全的。
21 |
22 | ###### __autoreleasing
23 | > 将对象赋值给附有 `__autoreleasing`修饰的变量等同于 `ARC` 无效时调用对象的 `autorelease` 方法,实质就是扔进了自动释放池。
24 |
25 |
--------------------------------------------------------------------------------
/网络/23.第二十三题.md:
--------------------------------------------------------------------------------
1 | ## 23. SSL 传输协议?说一下 SSL 验证过程?
2 |
3 | * 1.配备了 `身份证书`,防止被冒充。
4 | * 2.有 `校验机制`,一旦被篡改,双方都会知道。
5 | * 3.通过 `加密` 进行传播。
6 |
7 | #### 连接过程如下:
8 | * ①:客户端向服务端发消息,包括客户端支持的 `加密算法` 以及 `随机数1` 、`TLS` 版本号。
9 | * ②:服务端向客户端返回信息,包括双方已经匹配好的 `加密算法` 以及 `随机数2`、`Server证书` 。
10 | * ③:服务端向客户端返回 `验证证书`。
11 | * ④:客户端进行证书验证,首先要评估信任证书
12 | - 1.服务端向客户端返回证书的 `数字摘要` 与服务端证书返回客户端,解密后的是否一致,防止被篡改。
13 | - 2.验证证书链:逐级验证服务端证书是否在可信任证书列表。
14 | - 3.验证通过后:
15 | - ①:将 `随机数1`、`随机数2`、服务器端返回 `证书公钥` 加密过后的 `预主秘钥` 三者组合成 `会话密钥`。
16 | - ②:服务端拿到 `会话秘钥` 后,会用服务端证书 `私钥`进行解密,得到 `预主秘钥`。
17 | - ③:服务端将 `随机数1`、`随机数2`、服务器端证书私钥解密得到的 `预主秘钥` 三者组合成 `会话密钥`。此时客户端的 `会话秘钥` 和 服务端的 `会话秘钥` 应该是一致的。
18 | - ④:接下来会经行验证:
19 | - 1.客户端通过 `会话秘钥`,加密信息发给服务端,看服务端能否成功接收。
20 | - 2.服务端通过 `会话秘钥`,加密信息返给客户端,看客户端能否成功解析。
21 | - 4.以上步骤都通过了,此时 `SSL` 验证连接。
22 |
23 |
--------------------------------------------------------------------------------
/代码管理/1.1-5.md:
--------------------------------------------------------------------------------
1 | ## 5.总结一下 `Git` 常用的命令?
2 |
3 | * 1.`git init`初始化一个 Git 仓库。
4 | * 2.`git add ` 添加文件
5 | * 3.`git status` 查看当前 Git 仓库的文件状态。
6 | * 4.`git diff` 查看一个文件前后有什么不同。
7 | * 5.`git commit -m '描述信息'` 提交文件及相关信息。
8 | * 6.`git checkout -- ...`:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改。
9 | * 7.`git log` 命令显示从最近到最远的提交日志。
10 | * 8.`git reset --hard HEAD^` 回退到上一个版本。
11 | * 9.`git reset --hard 1094a` 如果是错误回退,只要当前窗口还没有关闭,可以找到最新的 `commit id`,根据 `commit id` 还原。
12 | * 10.`git reflog` 可以用来记录你的每一次命令,即便是误操作,可以通过这个命令进行还原。
13 | * 11.`git checkout` 是切换分支的意思。
14 | * 12.`git reset HEAD ` 可以把暂存区的修改撤销掉(unstage)
15 | * 13.`git remote add origin 远程仓库地址` 将本地仓库与远程仓库关联
16 | * 14.`git push -u origin master` 会把本地的 `master` 分支内容推送的远程新的 `master` 分支,还会把本地的 `master` 分支和远程的 `master` 分支关联起来.
17 | * 15.`git merge xxx`合并指定分支到当前分支
18 | * 16.`git branch` 查看当前的所有分支。
19 | * 17.`git branch xxx`创建指定的分支。
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Runtime/4.第四题.md:
--------------------------------------------------------------------------------
1 | ## `Category` 的实现原理?
2 |
3 | > 被添加在了 `class_rw_t` 的对应结构里。
4 |
5 | `Category` 实际上是 `Category_t` 的结构体,在运行时,新添加的方法,都被以倒序插入到原有方法列表的最前面,所以不同的`Category`,添加了同一个方法,执行的实际上是最后一个。
6 |
7 | 拿方法列表举例,实际上是一个二维的数组。
8 |
9 |
10 | `Category` 如果翻看源码的话就会知道实际上是一个 `_catrgory_t` 的结构体。
11 |
12 | --
13 | 例如我们在程序中写了一个 `Nsobject+Tools` 的分类,那么被编译为 `C++` 之后,实际上是:
14 |
15 |
16 | ```c++
17 | static struct _catrgory_t _OBJC_$_CATEGORY_NSObject_$_Tools __attribute__ ((used,section),("__DATA,__objc__const"))
18 | {
19 | // name
20 | // class
21 | // instance method list
22 | // class method list
23 | // protocol list
24 | // properties
25 | }
26 | ```
27 |
28 |
29 | `Category` 在刚刚编译完的时候,和原来的类是分开的,只有在程序运行起来后,通过 `Runtime` ,`Category` 和原来的类才会合并到一起。
30 |
31 |
32 |
33 | `mememove`,`memcpy`:这俩方法是位移、复制,简单理解就是原有的方法移动到最后,根根新开辟的控件,把前面的位置留给分类,然后分类中的方法,按照倒序依次插入,可以得出的结论就就是,越晚参与编译的分类,里面的方法才是生效的那个。
--------------------------------------------------------------------------------
/Runloop/13.第十三题.md:
--------------------------------------------------------------------------------
1 | ## 13.利用 `runloop` 解释一下页面的渲染的过程?
2 |
3 | 当我们调用 `[UIView setNeedsDisplay]` 时,这时会调用当前 `View.layer` 的 `[view.layer setNeedsDisplay]`方法。
4 |
5 | 这等于给当前的 `layer` 打上了一个脏标记,而此时并没有直接进行绘制工作。而是会到当前的 `Runloop` 即将休眠,也就是 `beforeWaiting` 时才会进行绘制工作。
6 |
7 | 紧接着会调用 `[CALayer display]`,进入到真正绘制的工作。`CALayer` 层会判断自己的 `delegate` 有没有实现异步绘制的代理方法 `displayer:`,这个代理方法是异步绘制的入口,如果没有实现这个方法,那么会继续进行系统绘制的流程,然后绘制结束。
8 |
9 | 过程可以用下面这张图来解释:
10 |
11 | 
12 |
13 | `CALayer` 内部会创建一个 `Backing Store`,用来获取图形上下文。接下来会判断这个 `layer` 是否有 delegate。
14 |
15 | 如果有的话,会调用 `[layer.delegate drawLayer:inContext:]`,并且会返回给我们 `[UIView DrawRect:]` 的回调,让我们在系统绘制的基础之上再做一些事情。
16 |
17 | 如果没有 `delegate`,那么会调用 `[CALayer drawInContext:]`。
18 |
19 | 以上两个分支,最终 `CALayer` 都会将位图提交到 `Backing Store`,最后提交给 `GPU`。
20 |
21 | 至此绘制的过程结束。
22 |
23 | 
24 |
25 |
--------------------------------------------------------------------------------