新生代农民工的主页

新生代农民工的主页

it's better to burn out than to fade away

UIStackView之一问一答

stackview_bg

前言

此篇文章作为在使用UIStackView前的一些答疑,既是扫盲篇,也是实用篇。以下会讲述一些实用的案例,目的就是让更多的人拥抱UIStackView。同时欢迎小伙伴通过评论区讲讲使用StackView遇到的问题。

答疑

排列视图间距大小不一

使用UIStackView来简化iOS的界面布局

stackview_bg

前言

在过去iOS页面布局较为传统,大多数人使用Frame或者AutoLayout来布局,在iOS9以后,引入了UIStackViewUIStackView是用于线性布局的控件,可以自动管理子视图布局,自动填充。它借鉴了前端的布局算法Flexbox,可以简便地实现各种页面布局。

UIStackView虽然已经不是新控件了,但还是有很多同学并没有使用起来。有时需要修改别人的代码看到乱糟糟的布局代码就有很多槽点。所以这也是写这篇文章的目的所在,真的推荐大家使用StackView,可以让你事半功倍,省下来的时间摸鱼不香嘛。

回归正题,不管是使用Frame或者AutoLayout来布局,我们都需要对所有的控件的位置、大小进行设置,Frame需要指定位置布局,AutoLayout需要指定约束布局;而UIStackView布局方式凸显它的优势在于不需要设置排列视图(即子视图)的位置,大小(不是必须的),而是通过自身的排列、分布方式自动完成布局。对比起来,使用UIStackView更高效,我们可以通过嵌套UIStackView快速完成各式各样的布局。

简单了解 iOS CVPixelBuffer(下)

前言

「简单了解 iOS CVPixelBuffer (中)」中,我们了解了颜色空间RGBYUV的区别以及相关的背景知识,最后对CVPixelBuffer中的kCVPixelFormatType相关类型进行了解读。我们已经对CVPixelBuffer有了初步的了解,在这篇文章中,我们将继续聊聊CVPixelBuffer在使用过程中的一些格式转换;

RGBYUV格式转换

在很多场景下,我们需要将不同的颜色空间进行转换,以此来解决对应的工程性问题。
以下是转换公式:

YUV -> RGB

简单了解 iOS CVPixelBuffer(中)

前言:

「简单了解 iOS CVPixelBuffer (上)」)中,我们了解了CVPixelBuffer如何创建、修改、以及检查CVPixelBuffer相关的参数。在上篇文末我们有讲到在这篇文章中,我们将了解颜色空间RGB和YUV的区别以及相关的背景知识,然后回过头来再看CVPixelBuffer中的kCVPixelFormatType相关的类型。

相信大家对于RGB都不陌生吧,那么YUV大家是否了解呢,它为我们做了些什么?

在开篇我先提出一个问题:为什么要使用YUV呢? 这个问题在我们了解了颜色空间之后,相信大家心中就已经有了答案。接下来开始我们的正文。

颜色空间

简单了解 iOS CVPixelBuffer (上)

前言:

在iOS中,我们会常常看到 CVPixelBufferRef 这个类型,最常见到的场景是在Camera 采集的时候,返回的数据中有一个CMSampleBufferRef,而每个CMSampleBufferRef则包含一个 CVPixelBufferRef,在视频硬解码的返回数据里也是一个 CVPixelBufferRef(里面包含了所有的压缩的图片信息)。在了解了CVPixelBufferRef之后,我们将能够掌握并且运用CVPixelBufferRef的使用;

本篇我们主要熟悉下CVPixelBuffer的使用;

CVPixelBuffer 简介

CVPixelBuffer:核心视频像素缓冲区是在主存储器中保存像素的图像缓冲区。生成帧、压缩或解压缩视频或使用 Core Image 的应用程序都可以使用 CVPixelBuffer

CocoaPods中podsepc文件设置详情

在前面的文章中,我们有讲过如何如何使用CocoaPods制作私有库,在制作私有库中,有一个关键点就是配置.podsepc文件,所以在这篇文章中我们将整理出.podsepc文件的配置。

想要了解cocoapods官方文档的详细设置点这里 podspec.html

基础设置

这里的设置都是最基础的,一般会有默认的文案,或者在生成podsepc文件时,自动生成的。如果了解过的,可以自行忽略。

设置名称:

链接器到底干了些什么?

前言

我们在前文「了解 Mach-O文件」中,有提到过编译器会将文件编译,然后生成Mach—O文件,而程序是不会执行这么多的Mach—O文件,所以链接器会把这些Mach—O文件合并成一个。

链接器干了什么?

iOS系统的可执行文件不就是 Mach-O文件吗,为什么还需要合并Mach- O文件呢?可能有同学会有疑惑吧🤔,是这样的,在我们的项目文件中定义了很多函数和变量,而这些函数和变量和其他文件有可能是相互依赖的,如果没有将这些函数和变量绑定关联起来的话,那么单个 Mach-O文件是无法正常运行的,因为,如果运行时碰到调用在其他文件中实现的函数的情况时,就会找不到这个调用函数的地址,从而无法继续执行。

链接器在链接目标文件的过程中,会创建一个符号表(Symbol Table),用来把我们定义的符号(链接中,我们将函数和变量统称为符号)和未定义的符号记录在其中。

了解 Mach-O文件

Mach-O文件

想要一个应用程序运行起来,那么它的可执行文件格式一定要被操作系统所理解。在Windows系统的可执行文件是PE,而在OS XiOS 中的可执行文件是Mach-O

那么Mach-O是怎么生成的呢?苹果公司目前使用的编译器是LLVM,在程序编译时,编译器会对每个文件进行编译,然后生成Mach-O文件,而后链接器会将项目中的多个 Mach-O 文件合并成一个,最终的这个就是我们的可执行Mach-O文件.

那么Mach-O 文件里面有哪些内容呢?其实主要还是数据和代码,其中数据是一些初始值的定义,代码就是一些是函数的定义。下面我们一起了解下Mach-O文件。

Mach-O文件简介

深入理解 iOS RunLoop

RunLoop 是iOS中重要的一个概念,在 iOS 里它是由 CFRunLoop 实现。本章将从源码的方面梳理下RunLoop相关的概念、结构、原理。

浅谈RunLoop

RunLoop概念:

一般来讲,一个线程在执行任务完成后,就会结束。但是在我们的应用程序中不会直接结束,而是会在线程中构建一个消息循环机制。当有事件要去处理时保活线程,当没有事件要处理时让线程进入休眠,这个消息循环的机制就是RunLoop

RunLoop和线程的关系:

深入理解 iOS Runtime

了解Runtime有助于我们理解Objective-C运行时系统的工作原理以及如何利用它。本章将介绍NSObject类以及Objective-C程序如何与运行时系统进行交互,如何在运行时查找对象的信息,如何将消息转发给其他对象。

Runtime简介

Runtime 又称运行时,是iOS系统的核心,它是一套底层的C语言API。它会将一些工作放在代码运行时才处理而并非编译时,所以有很多类和成员变量在我们编译时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。

运行时交互

Objective-C中与运行时系统有三个层次的交互:

avatar
新生代农民工
witness me