iOS知识整理(一)
最近的iOS的一些知识进行复习,基本都是一些 blog
iOS的各种锁
Objc_msgSend
Block
GCD
GCD容易让人迷惑的几个小问题
-Parse的底层多线程处理思路:GCD高级用法 --好好看下
-
往主队列提交Block,无论是sync,还是async,都是在主线程中执行。
-
往非主队列中提交,如果是sync,会在当前提交Block的线程中执行。如果是async,则会在分线程中执行。
-
dispatch_barrier_sync这个方法和dispatch_barrier_async作用几乎一样,都可以在并行queue中当做栅栏。唯一的区别就是:dispatch_barrier_sync有GCD的sync共有特性,会阻塞提交Block的当前线程,而dispatch_barrier_async是异步提交,不会阻塞。
-
dispatch_sync,我们来讲讲它和dispatch_barrier_sync的区别。二者因为是sync提交,所以都是阻塞当前提交Block线程。而它俩唯一的区别是:dispatch_sync并不能阻塞并行队列
AutoreleasePool
编译器
Mach-O 可执行文件
iOS 程序 main 函数之前发生了什么
Objective-C Runtime : From Build To Did Launch
你真的了解 load 方法么?
编译器的工作过程
clang编译器
理解编译过程
Operation Queues
iOS 并发编程之 Operation Queues
Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
runtime
isa 和 meta-class
objectC 的isa 详解
Runtime 10种用法
OC最实用的runtime总结,面试、工作你看我就足够了
Runtime-动态创建类添加属性和方法
runloop
iOS多线程编程指南(三)Run Loop
iOS多线程编程指南(一)关于多线程编程
探究KVO&kvc
探究KVO的底层实现原理
iOS 万能跳转界面方法 (runtime实用篇一)
[深入浅出Cocoa]详解键值观察(KVO)及其实现机理
ObjC中国 KVC 和 KVO
手动设定实例变量的KVO实现监听
copy和 mutable copy
NSNotificationCenter
http://www.2cto.com/kf/201312/265185.html
NSNotificationCenter:管理单一进程内的通知。
当这个事件确实发生了,通知中心发出通知,立刻广播通知到所有注册的对象。或者,通知被放到通知队列中,这个通知延迟指定的通知并且根据指定的标准聚合类似的通知,然后会发布通知到通知中心。
通知中心同步地传递通知给观察者。换句话说,当发布一个通知时,直到所有的观察者都收到以及处理通知后,发布者才能重新控制发布。要异步地发送通知,要使用通知队列。请参考通知队列。
Categories
追本溯源-category如何加载
categories的作用?继承和categories在实现中有何区别?
我们知道,在类和category中都可以有+load方法,那么有两个问题:
1)、在类的+load方法调用的时候,我们可以调用category中声明的方法么?
2)、这么些个+load方法,调用顺序是咋样的呢?
所以,对于上面两个问题,答案是很明显的:
1)、可以调用,因为附加category到类的工作会先于+load方法的执行
2)、+load的执行顺序是先类,后category,而category的+load执行顺序是根据编译顺序决定的。
目前的编译顺序是这样的:
load
关于 +load 方法的几个 QA
Q: 重载自己 Class 的 +load 方法时需不需要调父类?
A: runtime 负责按继承顺序递归调用,所以我们不能调 super
Q: 在自己 Class 的 +load 方法时能不能替换系统 framework(比如 UIKit)中的某个类的方法实现
A: 可以,因为动态链接过程中,所有依赖库的类是先于自己的类加载的
Q: 重载 +load 时需要手动添加 @autoreleasepool 么?
A: 不需要,在 runtime 调用 +load 方法前后是加了 objc_autoreleasePoolPush() 和 objc_autoreleasePoolPop() 的。
Q: 想让一个类的 +load 方法被调用是否需要在某个地方 import 这个文件
A: 不需要,只要这个类的符号被编译到最后的可执行文件中,+load 方法就会被调用(Reveal SDK 就是利用这一点,只要引入到工程中就能工作)
业务
Swift
Swift之?和!
ReactiveCocoa
冷热信号
热信号是主动的,即使你没有订阅事件,它仍然会时刻推送。如第二个例子,信号在50秒被创建,51秒的时候1这个值就推送出来了,但是当时还没有订阅者。而冷信号是被动的,只有当你订阅的时候,它才会发送消息。如第一个例子。
热信号可以有多个订阅者,是一对多,信号可以与订阅者共享信息。如第二个例子,订阅者1和订阅者2是共享的,他们都能在同一时间接收到3这个值。而冷信号只能一对一,当有不同的订阅者,消息会从新完整发送。如第一个例子,我们可以观察到两个订阅者没有联系,都是基于各自的订阅时间开始接收消息的。
是不是可以发现,subject类似“直播”,错过了就不再处理。而signal类似“点播”,每次订阅都会从头开始。所以我们有理由认定subject天然就是热信号。
看到这里,我们终于揭开了热信号的面纱,结论就是:
RACSubject及其子类是热信号。
RACSignal排除RACSubject类以外的是冷信号
总结
kvo 手动触发和自动触发
category 的 load 和 class 的 load 顺序
继承 NSOperation 实现哪些方法
copy 和 mutablecopy, nsstring 和 mutablestring copy
CGRecct 怎么 copy 到堆上。
从一个点到另一个点,怎么实现移动和旋转。
runtime 的结构,实例方法和类方法 isa
weak对象什么时候释放?__weak如何实现目标值自己主动设置nil的?
__weak如何实现目标值自己主动设置nil的
将CGPoint、CGSize、CGRect等放进数组的方法?
runtime的内存结构和有哪些结构,怎么追溯实例方法和类方法。
三方库源码学习
AFnetwork
FNetworking2.0的源码解析
AFNetworking到底做了什么?
AFNetWorking的理解 --写的不错
NSUrlSession
从 NSURLConnection 到 NSURLSession
YYCache
YYCache 设计思路
源码解析--YYCache
YYCache源码分析(一)
YYCache源码分析(三)
JavaScriptCore
关于iOS7里的JavaScriptCore framework
Weex
Weex学习与实践(一):Weex,你需要知道的事
深度揭秘阿里移动端高性能动态化方案Weex
React Native通信机制详解
React Native 从入门到原理
JSPatch
所以 JSPatch 的原理就是:JS传递字符串给OC,OC通过 Runtime 接口调用和替换OC方法。这是
JSPatch实现原理详解
**iOS关于HTTPS支持并防止中间人攻击 **
iOS关于HTTPS支持并防止中间人攻击
打造安全的App!iOS安全系列之 HTTPS