摘要:
线程的定义: 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行 进程要想执行任务,必须得有线程,进程至少要有一条线程 程序启动会默认开启一条线程,这条线程被称为主线程或UI线程 进程的定义 : 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用的且受保护的 阅读全文
摘要:
方法->底层会编译成消息->消息查找会使用递归查找 元类是一种虚拟的类,系统实现的,用来存储类对象的 对象分为: 1. 实例对象:存在类里面, 2. 类对象:存在元类里面 实例方法: 递归查找父类 -> 最终会查找到NSObject 如果没有实现就会进入动态方法解析 /*************** 阅读全文
摘要:
Runloop 不仅仅是一个运行循环,而且是一个对像,对像里面提供很多东西。(do-while循环) 提供一个入口,让程序进入do...while循环,保证应用程序不被退出。 runloop的官方文档是在thread里面的一个小分支,runloop和线程是息息相关的。 runloop是一种消息机制的 阅读全文
摘要:
c c++ 汇编一起写成的api,为OC提供运行时。 官方文档 与运行时相对应的是编译时:源代码翻译成机器可识别的语言(汇编),最后翻译成二进制代码。 代码运行起来时,运行时会把可执行文件装载到内存中。 运行时版本: Legacy and Modern Versions Objective-C 2. 阅读全文
摘要:
用法: 1. 初始化并 - (FBKVOController *)kvoCtrl{ if (!_kvoCtrl) { _kvoCtrl = [FBKVOController controllerWithObserver:self]; } return _kvoCtrl; } 2. 添加观察者两种方式 阅读全文
摘要:
下面来实现KVO自动销毁:(在合适的时候,自动移除观察者) @implementation NSObject (FXKVO) - (void)dealloc{ //指回父类 Class superClass = [self class];//KVOStudent object_setClass(se 阅读全文
摘要:
系统dealloc中做了什么事情? 移除观察者之前打印: 移除观察者,isa指针指回原来的类,动态生成的子类不知道是否会消失?打印下: (防止isa的影响,在动态方法解析的时候,要判断class.isa 是否为 metal class,类的isa不一定指向metal,有可能指向kvo动态子类,所以是 阅读全文
摘要:
1. 不调用实例变量的方法 2. 动态生成子类 (利用runtime生成:申请类,添加一些方法-set-class等方法,注册类 ) ****常量类型不能添加观察者 #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interfac 阅读全文
摘要:
官方文档地址: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html 基本用法: 1. [self.student add 阅读全文
摘要:
load方法什么时候调用? method Swizzling 为什么要放在load方法里面? /*********************************************************************** * _objc_init * Bootstrap initi 阅读全文