iOS 数组中如何存储弱引用
今天在项目中遇到了一个有趣的问题。项目中有一个监听的服务,监听需要将控制器放入一个数组中为其进行相应的操作。不过这引发了一个循环引用的问题。那么问题就变成了,如何在数组中存储弱引用呢?
数组中存储弱引用我们可以有两种解决方式:
- 设置一个类来存储我们的控制器,这个类的中用于存储的属性自然是
weak
类型。 - 使用
NSPointerArray
。
今天在项目中遇到了一个有趣的问题。项目中有一个监听的服务,监听需要将控制器放入一个数组中为其进行相应的操作。不过这引发了一个循环引用的问题。那么问题就变成了,如何在数组中存储弱引用呢?
数组中存储弱引用我们可以有两种解决方式:
weak
类型。NSPointerArray
。今天在工作中遇到了需要让 AVPlayerLayer
支持 autolayout
的问题。因为我播放器的 playerView
是通过约束决定大小的,目的为了适应小屏手机。我需要让我的 AVPlayerLayer
充满我的 playerView
,如果有 autolayout
这个问题就非常好解决,但是 layer
是不支持 autolayout
的,我想到了两种解决方式。
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 | a = abs |
pass
定义空函数,目的是为了让程序能够跑起来。
1 | def my_func(): |
1 | def my_abs(x): |
我想在之前升级到 macOS Mojave 的同学都会经历过一条命令:
1 | defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO |
执行如上命令会开启苹果之前的字体渲染方式 – 子像素抗锯齿。因为苹果在 Mojave 系统上启用了新的灰度抗锯齿模式,导致 Chrome 浏览器的字体实在无法直视,有幸今天 Chrome 浏览器更新到 72 版本后修复了这个问题。
实现一个名叫 Multiset
的集合数据结构,要具有如下的方法
count(for:)
返回相应数据的存储个数;add(_:)
添加数据;remove(_:)
。举例:
1 | m = Multiset() |
前阵子忙疯了,最近得空,来更新一下自己的博客 - 记一次 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 脚本。