Home

iOS图像渲染原理

1. UIKit UIKit是iOS开发者最常用和熟悉的UI框架,承担着UI显示和用户交互的功能。UIView在UIKit框架中最基本的单元,苹果官方文档描述UIView的基本功能: 绘制和动画(Drawing and animation) 布局和子视图管理(Layout and subview management) 事件处理(Event handling) UIView作为UIResponder的子类,能够响应和处理事件。 UIView本身其实并不支持图层的绘制,显示和管理,这些能力是来自于CALayer。 @interface UIView : UIResponder @proper...

Read more

Fastlane自动管理iOS证书,打包,签名,发布

Fastlane 1. 初始化fastlane 在项目目录下执行命令,并按照提示选择所需功能,输入应用信息以及Apple开发账号信息。 fastlane init 执行完成后,项目目录下会自动生成fastlane文件夹,文件夹中生成两个文件Appfile 和 Fastfile Appfile 中包含该应用的基本信息(app id,开发者账号信息) app_identifier("com.zm.OCTest") # The bundle identifier of your app apple_id("*********") # Your Apple email address itc_team_id("*******") # App Store Conne...

Read more

计算机显示器系统,屏幕卡顿以及撕裂的原理

显示器系统 1. 显示器工作原理 当屏幕显示画面时,CRT的电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。 为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。当电子枪换行进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync;而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称 VSync。显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。虽然现在的显示器基本都是液晶显示屏了,但其原理基本一致。 2. 显示器系统的组成 ...

Read more

Objective-c KVC

KVC(Key-Value Coding),允许开发者通过key或者keyPath直接访问对象的属性,或者为对象的属性赋值而不用调用明确的存取方法 // NSObject的NSKeyValueCoding分类提供了KVC的相关方法 @interface NSObject(NSKeyValueCoding) - (nullable id)valueForKey:(NSString *)key; - (void)setValue:(nullable id)value forKey:(NSString *)key; - (nullable id)valueForKeyPath:(NSString *)keyPath; - (void)setValue:(nullable id)va...

Read more

Objective-c NSProxy

Objective-c 语言中的类在声明时,必须指明它的父类。 NSObject 和 NSProxy是 Objective-c提供的顶级父类,每一个OC类最终都会继承其中一个。绝大部分的OC类都会继承于NSObject,而少部分继承于NSProxy。 NSProxy NSProxy是一个抽象父类,定义了一套API,作为其他对象或者不存在的对象的替身或者代理。 通常,当NSProxy收到消息,会转发给真实的对象或者加载真实对象(真实对象懒加载)。NSProxy的子类必须实现分发消息和创建初始化真实对象的逻辑。 NSProxy子类的实现 NSProxy实现了根父类必须的基本方法,包括NSObject协议声明的方法。但是,作为抽象类它没有提供任何初始化方法,并且当收到无法处理的消息...

Read more

Objective-c 消息发送与消息转发

在Objective-c语言中,调用某个对象的方法,称为向某个对象发送消息。不同于C语言的函数调用,OC的方法调用是动态的,在运行时才决定调用具体的方法实现。 int main(int argc, const char * argv[]) { @autoreleasepool { NSString * str = [[NSString alloc] init]; NSLog(@"%@",str); } return 0; } 将以上的OC代码通过clang -rewrite-objc转换为C/C++语言 int main(int argc, const char * argv[]) { /* @autorele...

Read more

OC NSObject的-isEqual:和-hash 方法

== 运算符 在 C 家族语言中,==运算符用于比较俩个变量的值是否相等。而OC中的对象都是使用指针变量来表示,因此当对于两个OC对象进行比较时,实际上比较的是两个指针的变量的值,即两个OC对象的地址。 int a = 0; int b = 1; int c = 0; a == b // false a == c // true NSString * d = @"Hello World"; NSString * e = @"Hello World"; NSString * f = [[NSString alloc] initWithFormat:@"Hello %@",@"World"]; d == e // true e == f // false N...

Read more

(UIKit Framework) UITouch事件的处理

(UIKit Framework) UITouch事件的处理 iOS系统在运行过程中,会收到各种不同的事件,包括touch事件,motion事件,remote control事件以及press 事件。 touch事件 指的是与设备屏幕间的交互 motion事件指的是设备运动相关的事件,例如摇一摇等; remote control事件指的是收到外设(例如耳机)发出的命令,例如耳机控制音视频的播放; press 事件指的是游戏手柄,apple TV遥控器等有物理按钮的设备间的交互。 我们这里只讨论touch事件与iOS设备屏幕的交互。 当点击屏幕时,iOS系统首先会收到touch事件并分派到相应的a...

Read more