iOS知识整理(一)

2017-02-26  本文已影响139人  Fly晴天里Fly

最近的iOS的一些知识进行复习,基本都是一些 blog

iOS的各种锁

深入理解 iOS 开发中的锁

Objc_msgSend

Block

block的小测试

GCD

GCD容易让人迷惑的几个小问题
-Parse的底层多线程处理思路:GCD高级用法 --好好看下

AutoreleasePool

iOS 中的 Autorelease Pool

编译器

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多线程编程指南(一)关于多线程编程

基于runloop的线程保活、销毁与通信

  1. 深入理解RunLoop
  2. 解密-神秘的 RunLoop
  3. iOS RunLoop进阶
  4. 关于NSRunLoop和NSTimer的深入理解

探究KVO&kvc

探究KVO的底层实现原理
iOS 万能跳转界面方法 (runtime实用篇一)
[深入浅出Cocoa]详解键值观察(KVO)及其实现机理
ObjC中国 KVC 和 KVO
手动设定实例变量的KVO实现监听

copy和 mutable copy

谈谈iOS中可变对象与不可变对象那些事儿

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的理解 --写的不错

NSUrlConnection的底层过程分析

NSUrlSession

从 NSURLConnection 到 NSURLSession

YYCache
YYCache 设计思路
源码解析--YYCache
YYCache源码分析(一)
YYCache源码分析(三)

JavaScriptCore
关于iOS7里的JavaScriptCore framework

使用JavaScriptCore现在JS和OC间通信

Weex
Weex学习与实践(一):Weex,你需要知道的事
深度揭秘阿里移动端高性能动态化方案Weex

React Native通信机制详解
React Native 从入门到原理

JSPatch
所以 JSPatch 的原理就是:JS传递字符串给OC,OC通过 Runtime 接口调用和替换OC方法。这是
JSPatch实现原理详解

**iOS关于HTTPS支持并防止中间人攻击 **
iOS关于HTTPS支持并防止中间人攻击
打造安全的App!iOS安全系列之 HTTPS

上一篇下一篇

猜你喜欢

热点阅读