Dev
struct 内存对齐
C/C++ 中 struct 的内存对齐
技术相关
Dev
C/C++ 中 struct 的内存对齐
Dev
利用滑动窗口思想解决 iOS 长截图绘制失败的问题
Dev
使用 Swift 实现链式编程,并且兼容 Objc
介绍 iOS 堆栈符号化常用的方法。
终端相关 输入输出 清理终端用户输入缓冲区的数据 如果希望在调用 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.
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
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,
类型修饰符 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
最近在做一个分享需求的时候遇到了一个问题:将比较长的 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
objc 格式 参考链接:https://stackoverflow.com/a/19169271/16991379 /** First line text. Putting \\n doesn't create a new line.\n One way to create a newline is by making sure nothing is on that line. Not even a single space character! @a Italic text @em with @@a or
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 = "
之前写 C++ 版的 openCV 代码时都是在 Xcode 或者 VSCode 上进行的。最近发现 Clion 也挺好用的,记录一下在它上面配置 openCV 环境的过程 安装 openCV brew install cmake brew install opencv 配置 CMake 在 CLion 的工程 CMakeLists.tex 文件里面添加: find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) 然后 reload 一下,