Terminologies in Programatic Advertising

在做一些商业化相关的项目时,经常听到其他部门的同事讲一些程序化广告方面的术语,让人一头雾水。这篇博客就来整理一下常见的术语和它们的含义,这样以后就能愉快的和别人交(zhuang)流(bi)啦😊

术语解析

Function Level Code Coverage for iOS

之前的博客中提到过,如果直接使用 Xcode 集成的代码覆盖率工具,提交 App 的时候似乎会被拒绝。这就导致如果我们想让线上的用户参与覆盖率测试就会受到困难,只能局限在公司内部进行测试。为了解决这个问题,就需要自己实现一套覆盖率检测工具。

思路

Getting Started to iOS Code Coverage

获得代码覆盖率报告可以让我们更精准地进行测试。LLVM 本身就通过编译插桩提供了这样的能力,因此可以很简便地实现这一功能。但根据 Technical Q&A QA1964 提到的内容,带有 LLVM instrumentation 的 App 在提交的时候会被以下理由拒绝。因此如果要在线上做覆盖率检测,可能需要我们自己来实现。

1
Invalid Bundle - Disallowed LLVM instrumentation. Do not submit apps with LLVM profiling instrumentation or coverage collection enabled. Turn off LLVM profiling or code coverage, rebuild your app and resubmit the app.

Writing the Very First LLVM Pass

这篇文章记录了编写第一个 LLVM Pass 的过程,主要跟随 LLVM 官方的 Hello Pass 教程。

编译 LLVM

Intro to Tagged Pointer

所谓 Tagged Pointer 就是指针不再指向数据,而是用其中的一部分直接表示该数据本身。这个词借鉴于 Tagged Architecture 。在 Tagged Architecture 中,每个字(word)的一部分被用来表示数据的类型(type),这部分就是所谓的 Tag。虽然本质上和 Tagged Pointer 有所区别,但该名称还是被一直沿用下来。

问题起因

RunLoop 原理

RunLoop 是许多 iOS 开发者都会“假装”理解的概念。相关的概念常看常新,每次都有一番新的收获 (每次都不能彻底理解系列)~

一句话概括 RunLoop 是干啥的

What are Dynamic Libraries ?

LLVM循环优化

LLVM 是一个广为使用的编译器套件,也是苹果官方的编译器。LLVM 前端可以把高级代码转换成 LLVM 自身的中间代码(IR),而后端再把 IR 翻译为目标平台的机器码。而 LLVM 提供的优化器 opt 可以优化 IR 代码,并生成优化过的 IR 代码。在之前的博客中,我已经探索过使用 clang 来优化一个简单的程序。在那个简单的循环程序中,较为影响性能的就是 Loop Unrolling 优化。我也做出了一些性能测试。

WiFi监听UDP包

最近遇到一个需求,一个被远程控制的小车需要在多个网络中无缝漫游。如果按照我们熟悉的方式,搭建一个 Wi-Fi 网络,小车上的树莓派就可能在网络切换时掉线 1 至 2 秒钟。鉴于小车是被实时远程控制的,我们需要网络切换时间极短,而不同 Wi-Fi 之间的切换速度就不符合要求。

LoopUnrolling优化效果对比

循环是计算机程序中非常重要的结构。如果对循环加以优化,就可以大幅提高程序的运行速度。本文通过一段简单的小程序,对比了 Loop Unrolling 前后的性能差异。

什么是 Loop Unrolling

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×