Gray

Beijing, China
Gray

Python 零食铺

终端相关 输入输出 清理终端用户输入缓冲区的数据 如果希望在调用 input 前清理输入缓存区的数据,可以使用如下代码: import termios termios.tcflush(sys.stdin, termios.TCIFLUSH) input('your input prompt') 函数功能描述如下: termios.tcflush(fd, queue): 丢弃文件描述符fd中的数据队列。变量queue表示具体待处理的队列,如TCIFLUSH表示输入队列,TCOFLUSH表示输出队列,TCIOFLUSH同时表示输入输出队列。 参考:https://blog.csdn.net/u010158659/article/details/50829950 命名规范 类别 规范 示例 模块名 小写字母,单词之间用下划线_分割 my_script.

By Gray

Swift Concurrency 异步感染问题

Swift Concurrency 异步感染问题 当我们在一个非 async 的方法 A 里面调用 async 的方法 B 时,Xcode 会提示我们无法这么做: 'async' call in a function that does not support concurrency,并且引导我们给 A 加上 async 标识。 ⬆️ 这就是异步感染问题,async 方法的调用方在不知不觉中也变成了 async 方法。 为了避免 async 向上一直感染,可以使用 Task 方式调用 async 方法: func A() { Task { await B() } } func

By Gray

利用 memgraph 文件追踪 App 内存信息

memgraph 文件导出方法 1. 在 App 调试状态下点击 View Memory Graph Hierarchy 或者点击这里 2. 生成 memgraph 文件后,点击 File → Export Memory Graph memgraph 文件可以用 Xcode 直接打开,但是直接打开查看的话,信息比较混杂,难以查找到自己想要的信息。下面就介绍一些在终端利用 memgraph 文件查看各种内存信息的指令。 使用 vmmap 查看虚拟内存信息 拿到 memgraph 文件后,在终端输入下面指令可以获取 App 进程占用的虚拟内存信息: vmmap filename.memgraph > output_vmmap.txt 输出文件中,首先展现的是不可写的内存区域,比如一些 framework,

By Gray

C++ 零食铺

类型修饰符 decltype 类型指示符 decltype 即 declare type,译为“声明类型“。decltype 是为了解决这样的场景:根据表达式的类型推断出想要定义的变量的类型,但并不使用表达式的值去初始化这个变量,即灵活定义变量的类型。 例如, const int ci = 0, &cj = ci; decltype(ci) x = 0; // x 的类型是 const int decltype(cj) y = x; // y 的类型是 const int&, 并且 y 绑定到变量 x decltype(cj) z; // 错误用法。z 和 y

By Gray

如何利用 UIScrollView 解决 UIView 长图片绘制失败的问题

最近在做一个分享需求的时候遇到了一个问题:将比较长的 UIView 绘制为 UIImage 的时候,会绘制失败,得到的是全黑/全白的图片 我们知道,将 UIView 绘制为 UIImage 的方法有以下几种: 1. 使用 UIView 的系统方法 - (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates; // example UIGraphicsBeginImageContextWithOptions(mainView.bounds.size, mainView.opaque, 0.0f); [mainView drawViewHierarchyInRect:mainView.bounds afterScreenUpdates:YES]; UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 2. 使用 CAL

By Gray

Flutter 学习笔记

Dart 官方文档:https://dart.cn/guides/language/language-tour 变量 const 和 final 的区别 const值在编译时确定,final值在运行时确定。 方法 函数简写 如果函数体只有一个表达式,则函数可以简写为: bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null; 参数 Dart 函数的参数有两种形式:必要参数和可选参数。必要参数位于所有参数的前面,可选参数则位于必要参数的后面。 如果一个函数声明里面有多个可选参数,那么调用方如何确定某个可选参数值是准确传给了目标参数呢? Dart 里面将可选参数分为了两种:可选命名参数和可选位置参数。 可选命名参数 使用{}将方法的某些参数划为可选命名参数。 可选命名参数通过在调用时明确给出目标参数的名字,来准确定位参数传递。 void getDetail(String name, {String branch = "

By Gray