Home

swift 编写第一个CLI程序

用swift 编写第一个CLI(command line tool)程序 起因 因为在研究swiftLint的时候,发现了熟悉的swift code,但却无法理解到底实现了什么? 发现swiftlint 都是基于开源库swift-argument-parser 做的,于是乎去了解apple的开源库swift-argument-parser , 然后才知道了,这里面还大有玄机嘞! swift-argument-parser 这个是用来解析命令行参数的苹果开源库,应用这个库能很方便的进行命令行参数解析。 后来非常好奇,那么swiftLint工程里的Package.swift文件又是啥呀? 一练的疑问,一头的雾水,于是乎扎入到探究的深坑中… 经过一两天的研究,翻看appl...

Read more

iOS自旋锁与互斥锁

iOS中自旋锁和互斥锁 起因 属性修饰符atomic,是否是绝对线程安全的? 当然乍一看,这两个问题好像没有必然的联系,但是了解atomic的内部实现,就能明白为什么我能跨度到自旋锁和互斥锁。(因为atomic其实内部是对于setter和getter加锁实现的) 后边我们再看atomic到底是否安全的问题 定义 锁:在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。(维基百科中的定义) 自旋锁: 自旋锁其实就是线程再未获得锁的时候处于忙等的状态,一直消耗cpu,而不会进入内核态。 互斥锁:互斥锁则是当未获得锁时,线程进入内核态,释放cpu的消耗,直到锁资源被释放,重新唤起休眠的线程。 其实从定义中我们也能很明...

Read more

Objective-CLint(创建一个轻量级的、支持pre-commit的Objective-C 的静态检查)

Objective-CLint 创建一个轻量级的、支持pre-commit的Objective-C 的静态检查 感谢 感谢 spacecommander作者提供的Objective-C lint的思路以及open source 本文大部分是基于 spacecommander累加的一些新功能。再次感谢开源作者,非常棒👍🏻 架构/构思 1.前因 因为OC-Lint的重量型检查,导致如果使用OCLint 那么首先我们需要安装OCLint 以及 还需要编译工程,如果我们使用pre-commit那么 就会导致我们每次 git commit 时间会增加很多,每次 commit可能对于我们来说都是一种煎熬。ok那么就需要我们使用另外的方式解决。 OK,解决方法之一就是我们之间使用Clang-f...

Read more

关于iOS 代码质量把控研究

前提 code review 是我们工作中可以说必不可少的一环,一方面能够提早的发现代码中不合理的部分、或者不稳定、架构不合理的部分,提高代码的质量;另外一方面能,更够让团队的知识共享,互相熟悉业务需求,以及团队写的好的部分。OK,作为code review最早最基础的一环,可以说是代码规范。如果人工进行代码规范的维护,难免会遗漏,而且会花费时间在这部分。 所以,针对这种情况,我们可以做的是,做一个lint帮助我们检测不规范的代码,OK,下面就lint,开始研究! Lint 时机 我们熟知的Objective-C lint,有OClint、Infer; swift 有swiftLint,首先我们先不考虑这个几个lint的问题,我们先考虑一个重要的问题,lint应该放到什么阶段?...

Read more

我想搞个mac app 插件,仅仅为了Typroa插入几行预置文字

前提 为了更好的维持我的博客系统,想着之后的博客都发布于github.io, 那么如果你有搭建过github.io 那么相比都知道YAML, 通过MARK down 中插入YAML FORMAT 语言,我们可以控制博客的标题、评论等等。。那么简单来说就是我不想用Typora每次建立一个新blog,都需要繁琐的插入那一堆YAML,比如 title: position、anchorPoint、frame理解 tags: iOS key: 107 # article_header: # type: cover # image: # src: https://user-images.githubusercontent.com/8369671/80915045-153ff780-...

Read more

position、anchorPoint、frame理解

前情提要 ​ 最近在学2d游戏框架SpriteKit,其中使用大量的AnchorPoint/position 来确定Node的位置,那本身来说对于anchorPoint、position的概念、以及他们之间互相起到什么作用,对于view又会造成什么影响,都是比较模糊的,所以再定位Node布局来说,就是一顿迷糊,正好工作这么多年了,还是对于这些基础的还是模糊,是有点说不过去了,所以我决定认真分析一下Frame、bounds、position、anchorPoint之间的关系,以及他们对显示的影响。 进入正文 frame: 表示了一个view 在其superView坐标系具体位置,那么他的参照物是其父view bounds:表示了一个view的本地坐标系下,参照物是自身,...

Read more

解决原生横滑scrollView和Flutter 纵滑CustomScroll的冲突

前言 最近项目中在横向滑动的PageViewController(WMPageController)里嵌入了Flutter 的 CustomScrollView,原本会觉得一切ok,却出现了一个致命的问题:安卓嵌入之后滑动流程稳定,没有任何问题,iOS 嵌入之后出现Flutter 页面滑动卡顿、不流畅,体现在触发flutter 列表滑动的同时,会触发原生横滑,且必须垂直滑动(无一点左右的滑动偏移)才会稳定触发Flutter 列表的滑动,否则容易触发左右横滑,所以我们习惯了单手用手机的人,根本无法顺畅滑动。如下面的gif(其实我已经很努力的在上下滑了,很明显上下滑动的距离大于水平滑动的距离,用户的用意也应该是要上下滑动,但是却触发了横滑): 解决方式 首先触摸flutt...

Read more

热重载原理研究和探索

热重载原理研究和探索 1. 前言 Flutter 亚秒级别的热重载是开发者的神兵利器,它能够提供我们快速修改UI、增加功能、修复bug,不需要重新启动应用,就可以看到改动效果。那么Flutter是如何做到这样的功能的呢?下面我们一起探究一下其中的原理。 2. 首先需要知道JIT 和AOT JIT JIT(Just In Time),指的是运行时编译,Flutter 在debug模式下采用这种方式,在运行时动态下发和执行代码,启动速度快,但是由于在运行时编译,性能会受影响。 AOT AOT(Ahead Of Time),指的是在运行之前进行编译,Flutter 在Release模式下采用,可以为特定的平台生成稳定的二进制代码、执行性能好、运行速度快,但是每次都需...

Read more

Flutter Text 文字下有黄色下划线

导致原因 导致这种情况发生的原因是因为,Text widget 隶属于Material 风格下的组件,如果根节点不是Material 相关组件,则会使用默认带黄色下划线的格式。如果根节点是Material 容器组件,则会采用其Material风格的样式(即不带有下换线)。 解决方式 1. 采用根节点为脚手架Scaffold组件 Scaffold(body: content,); 2. 采用根节点为Material 组件 Material(child: content); 3. 逐个修改Text 组件的style 下的decoration为TextDecoration.none child: Text( "专栏的文章", ...

Read more