OC原理

CPU和GPU 在屏幕成像的过程中,CPU 和 GPU 起着至关重要的作用。 CPU(Central Processing Unit,中央处理器) 对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics) ...

发布

iOS程序的内存布局 代码段:编译之后的代码 数据段: 字符串常量:比如 NSString *str = @"123" 已初始化数据:已初始化的全局变量、静态变量等 未初始化数据:未初始化的全局变量、静态变量等 栈:函数调用开销,比如局...

发布

多线程安全隐患 多个线程同时访问同一个资源(对象/变量/文件等),就可能出现数据错乱和数据安全问题。 比如下面代码,多个线程同时修改一个变量,最终导致数据错乱: @interface ViewController () @property (nonatomic, assign) i...

发布

iOS中的常见多线程方案 容易混淆的术语 有 4 个术语比较容易混淆:同步、异步、并发、串行 同步和异步主要影响:能不能开启新的线程 同步:在当前线程中执行任务,不具备开启新线程的能力 异步:在新的线程中执行任务,具备开启新线...

发布

解决NSTimer在滑动时停止工作的问题 创建定时器时,如果使用类似 +[NSTimer scheduledXXX] 的方法创建,则会自动添加到默认 RunLoop 模式并开始执行定时器。 而使用类似 +[NSTimer timerWithXXX] 的方法创建,则需要手动添加到 RunLoo...

发布

概述 RunLoop 顾名思义,就是运行循环,在程序运行过程中循环做一些事情。 RunLoop的基本作用 保持程序的持续运行 处理 App 中的各种事件(比如触摸事件、定时器事件等) 节省 CPU 资源,提高程序性能:该做事时做事,该休息时休息 ....

发布

常用API 类 动态创建一个类(参数:父类,类名,额外的内存空间) Class objc_allocateClassPair(Class superclass, const char * name, size_t extraBytes) 注册一个类(要在类注册之前添加成员变量) void objc_registerClassPair(C...

发布

消息机制 OC 中的方法调用,其实就是向方法调用者(消息接受者 reciver)发送一条消息,底层代码则是转换为 objc_msgSend 函数的调用。 比如下面示例代码: @interface Person : NSObject - (void)test:(int)a; @end @implementation P...

发布

概述 runtime 简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。基于 C/C++ 语言和汇编语言编写,苹果和 GNU 各自维护一个开源的 runtime 版本,这两个版本之间都在努力的保持一致。 对于 C 语言而言,函数的调...

发布

对象类型的auto变量 在 block 内部访问了对象类型的 auto 变量。 栈 如果 block 是在栈上,将不会对 auto 变量产生强引用。 堆 如果 block 被拷贝到堆上,会调用 block 内部的 copy 函数。 copy 函数内部会调用 _Block_object_assign ...

发布

block的类型 block 有 3 种类型,可以通过调用 class 方法或者 isa 指针查看具体类型。 3 种 类型的 block 都是继承自 NSBlock,NSBlock 又继承自 NSObject。 MRC 环境下 block 的类型和复制效果 类型 环境 内存区域 复制效果 ...

发布

概述 block 本质上也是一个 OC 对象,它内部也有个 isa 指针。 block 是封装了函数调用以及函数调用环境的 OC 对象。 block 的底层结构: 证明 block 是 OC 对象: void (^block)(void) = ^{}; Class blockClass = [block class]; NS...

发布

使用场景 可以减少单个文件的体积。 可以按照功能分组,放到不同的分类里,使类结构更清晰。 降低耦合性,同一个类可以有多个开发人员进行开发。 模拟多继承。 把静态库的私有方法公开。 可以给系统类新增功能。 分类底层结构 在 ob...

发布

概述 KVC 简称 Key-ValueCoding,是一个基于 NSKeyValueCoding 非正式协议的机制,可以允许开发者通过 Key 名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法。 这样就可以在运行时动态访问和修改对象的属性,...

发布

概述 KVO 的全称是 Key Value Observing,俗称 键值监听,可以用于监听某个对象属性值的改变。 基本使用 使用 KVO 监听 person 对象的 age 属性改变: @interface JFPerson : NSObject @property (nonatomic, assign) int age; @end ...

发布