轩辕十四

探索科技与创新的个人博客

今天在项目中遇到了一个有趣的问题。项目中有一个监听的服务,监听需要将控制器放入一个数组中为其进行相应的操作。不过这引发了一个循环引用的问题。那么问题就变成了,如何在数组中存储弱引用呢?

数组中存储弱引用我们可以有两种解决方式:

  • 设置一个类来存储我们的控制器,这个类的中用于存储的属性自然是 weak 类型。
  • 使用 NSPointerArray
阅读全文 »

今天在工作中遇到了需要让 AVPlayerLayer 支持 autolayout 的问题。因为我播放器的 playerView 是通过约束决定大小的,目的为了适应小屏手机。我需要让我的 AVPlayerLayer 充满我的 playerView,如果有 autolayout 这个问题就非常好解决,但是 layer 是不支持 autolayout 的,我想到了两种解决方式。

阅读全文 »

Carthage 与 Cocoapods 的不同

Cocoapods 是由来已久的 Cocoa 依赖管理工具,那么为什么 Carthage 项目被创建?

首先,Cocoapods(默认情况下)会自动的为你的应用程序和所有依赖创建和更新 Xcode workspace。Carthage 用 xcodebuild 构建框架(framework)的二进制文件,但是并没有将他们整合到用户项目中。Cocoapods 的目的是让用户使用起来更简单,而 Carthage 则是更灵活,减少对项目的侵入性。

Cocoapods 的目标在其README文件中有如下描述:

… to improve discoverability of, and engagement in, third party open-source libraries, by creating a more centralized ecosystem.

对比之下,Carthage 被创建成一个松散(decentralized)的依赖管理者,没有中心项目清单,这减少了维护工作并避免了任何中心故障点(通俗的讲就是去中心化)。然而,项目被发现就变的更加困难 – 用户必须去使用 GitHub 的 Trending 页面或者其他类似的页面(Cocoapods 就比较简单的可以在终端搜索需要使用的库)。

阅读全文 »

函数的定义

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”。

1
2
3
4
a = abs
print(a(-1))

output: 1

pass 定义空函数,目的是为了让程序能够跑起来。

1
2
def my_func():
pass
1
2
3
4
5
6
7
8
def my_abs(x):
# 检查传入的参数是否正确,只允许 int 和 float 类型的参数
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
阅读全文 »

字符串

ord() 函数获取字符的 ASCII 码值

1
2
3
4
5
print(ord('a'))
print(ord('A'))

output: 97
output: 65

chr() 函数把 ASCII 转换为对应的字符

1
2
3
4
5
print(chr(66))
print(chr(97))

output: B
output: a
阅读全文 »

我想在之前升级到 macOS Mojave 的同学都会经历过一条命令:

1
defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO

执行如上命令会开启苹果之前的字体渲染方式 – 子像素抗锯齿。因为苹果在 Mojave 系统上启用了新的灰度抗锯齿模式,导致 Chrome 浏览器的字体实在无法直视,有幸今天 Chrome 浏览器更新到 72 版本后修复了这个问题

阅读全文 »

实现一个名叫 Multiset 的集合数据结构,要具有如下的方法

  1. count(for:) 返回相应数据的存储个数;
  2. add(_:) 添加数据;
  3. 删除数据remove(_:)

举例:

1
2
3
4
5
6
7
8
m = Multiset()
m.add("cat")
m.add("dog")
m.add("cat")

m.count(for: "cat") -> 2
m.remove("cat")
m.count(for: "cat") -> 1
阅读全文 »

前阵子忙疯了,最近得空,来更新一下自己的博客 - 记一次 macOS 安装/配置 Jenkins 的过程,方便以后使用。

由于 macOS 新系统 Mojave 字体实在让人看着眼疼,昨天重新装回了 macOS High Sierra,并且机智的用 ThinBackup 备份了自己的项目配置,避免麻烦,配置上面的东西还是挺多的。

阅读全文 »

我升级到 macOS Sierra(以及后来的 Mojave),我试着在终端运行 git 命令,但是它一直显示如下的错误:

1
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

我该如何解决?

阅读全文 »

最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

阅读全文 »
0%