# 老司机 iOS 周报 #69 | 2019-05-27

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新闻

### [WWDC19 Schedule](https://developer.apple.com/wwdc19/schedule/#!/)

[@红纸](https://github.com/nianran)：WWDC 2019 已临近，特此献上日程表以供各位进行提前查阅。
（另外推荐一款 macOS 下的观看应用 [WWDC](https://github.com/insidegui/WWDC)。）

## 新手推荐

### 🌟 🐕 [给 iOS 开发者的 Flutter 指南](https://mp.weixin.qq.com/s?__biz=MzUyMjg5NTI3NQ==&mid=2247483737&idx=1&sn=dd55f91bce2fd947a9951488ce39558b&chksm=f9c5ab9dceb2228bc0136d2e7b8155e84e87d6123d0e919e35ed013388c02752adbe67c48679&scene=21#wechat_redirect)

[@邦Ben](https://weibo.com/linwenbang/)：作为一名 iOS 原生开发，如何更好的进入 Flutter？该文通过类比 iOS 开发中的概念来解释 Flutter 相关的内容，都是一些相当常见的基础内容，非常适合入门。Flutter 的热加载其实提供很好的入门试错体验，毕竟，你只需要保存一下就知道你写错了还是写对了，因此，入门的学习成本降低了不少。个人感觉，入门曲线要低于 ReactNative。

该文分为上下两篇：

- [给 iOS 开发者的 Flutter 指南（上）](https://mp.weixin.qq.com/s?__biz=MzUyMjg5NTI3NQ==&mid=2247483737&idx=1&sn=dd55f91bce2fd947a9951488ce39558b&chksm=f9c5ab9dceb2228bc0136d2e7b8155e84e87d6123d0e919e35ed013388c02752adbe67c48679&scene=21#wechat_redirect)
- [给 iOS 开发者的 Flutter 指南（下）](https://mp.weixin.qq.com/s/59w9e3pdnT5-GqF98J0gYQ)

### 🐕 [UIButton: Padding Between Image and Text](https://noahgilmore.com/blog/uibutton-padding/)

[@极速男孩007](https://github.com/ztlyyznf001)：本文介绍了如何通过修改 UIButton 的 contentEdgeInsets 和 titleEdgeInsets 还有 imageEdgeInsets的值，来改变 UIButton 中图片和文字的位置。

## 文章

### 🐕 [Improving your Swift code using value objects](https://www.hackingwithswift.com/articles/188/improving-your-swift-code-using-value-objects)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：值对象是自定义类型，它们是代表我们应用程序一部分的小型精确类型。与值类型一样，值对象应该是不可变的，值对象通过利用值类型的不变性以及添加自我验证的能力来帮助我们编写更易于理解，更容易测试，更安全的代码 。我希望您可以试一试。

### 🐎 [@autoreleasepool uses in 2019 Swift](https://swiftrocks.com/autoreleasepool-in-2019-swift.html)

[@xiaofei86](https://weibo.com/xuyafei86)：本文先是简单的介绍了 autoreleasepool 在 Objective-C 中的使用场景——在循环体中大量创建 autorelease 对象。而 ARC 对 Swift 的优化在过去几年中进步了很多，根据作者的测试，似乎 ARC for Swift 从不调用 autorelease，而是用多次调用 release 来替代。所以对于纯粹的 Swift 对象我们可能不再需要 autoreleasepool。但在 Swift 开发中 autoreleasepool 仍然有用，因为在 UIKit 和 Foundation 中仍然存在调用 autorelease 的遗留 Objective-C 类。以上便基本是本文的所有内容，如果你对 autorelease 的问题还不是很了解，可以去继续阅读原文。

### 🐢 [Building a NFC Scanner App with CoreNFC in Swift](https://medium.com/appcoda-tutorials/building-nfc-product-scanner-ios-app-with-corenfc-alfian-losari-5da0365bcde5)

[@享耳先森](https://github.com/iblacksun)：在 2014 年 Apple 发布 Apple Pay，iPhone 6 是第一批支持 NFC 功能的设备。iOS 11 终于发布了 CoreNFC 框架，第三方 App 可以在前台读取 NFC tags(iPhone 7 及以后的机型才能读取 NDEF)，iOS 12 增强了 CoreNFC 的能力，允许在后台读取 tags 并通过 Universal Link 技术唤起 App。iOS 13 马上就要发布了，相信开发者们十分期待 Apple 开放 NFC 写入功能。

文章详尽的描述了如何从零开发一个读取 NFC tags 的应用，甚至十分贴心的介绍了如何制作 tags 供测试使用，建议对 NFC 有兴趣的开发者们读一读。

### 🐎 [Using Codable to make enums with associated values even more powerful](https://blog.natanrolnik.me/codable-enums-associated-values)

[@zvving](https://github.com/zvving)：带有关联值的枚举被用在 Optional<T>、Resutl<T, E> 等场景、为编码带来更丰富且严谨的语义。作者通过一处网络数据解析的案例，展现定义枚举相比类或结构体的优势。也详细介绍了在此基础上如何实现 Codable 协议，支持持久化。

### 🐎 [Empty Strings in Swift](https://useyourloaf.com/blog/empty-strings-in-swift/)

[@JimQ](https://github.com/waz0820) 一个 string 是否 empty 可能有三种不同的含义：1. 长度为零；2. 只包含空白符；3. 可选值为空。针对这三种含义，文章分别给出了最优 & 最 Swift 化的判断方法。

### 🐕 [OOM 与内存](http://sindrilin.com/2019/05/23/oom_and_memory.html)

[@looping](https://github.com/looping)：本文作者从一起可疑的崩溃现象，即从崩溃日志上看，设备还有很多可用内存，但是排查发现，却是内存分配失败后对无效地址的访问错误；再结合内存分配方式，发现每种类型的内存分配地址都是有上限的，也就是说即便在设备依然有可用内存的情况下，如果某个类型的内存地址被分配完毕，同样会引发 OOM 问题。

本文不管是对问题排查过程的描述，还是对 malloc_zone 的分析介绍，都是一份很好的学习资料，感兴趣的同学可以深入学习下。

## 工具

### 🌟 [i18ns.com](https://i18ns.com/zh/index.html)

[@张嘉夫](https://github.com/josephchang10)：i18ns.com 是一个免费的多语言翻译搜索网站，致力于让软件国际化变得简单便捷。作者从长期的软件开发过程中发现，超过50%的软件文案都是可复用的，而在同类别软件中可复用的内容甚至超过80%以上，于是创建了这个网站。期望能帮助广大小微开发者能更廉价更便捷地完成软件国际化翻译。

### [Fledge](https://github.com/mmcc007/fledge)

[@老峰](https://github.com/GesanTung)：Fledge 是一个构建 Flutter 项目的 CI/CD（持续集成/持续部署）工作流工具，包括自动构建、测试、签名和发布 Apple Store 和 Google Store，支持 Travis、Jenkins、GitLab 等，感兴趣的同学还以点[这里](https://medium.com/@nocnoc/cicd-for-flutter-fdc07fe52abd)。

## 代码

### [Flutter4GitLab](https://github.com/stefanJi/Flutter4GitLab)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：[Flutter4GitLab](https://github.com/stefanJi/Flutter4GitLab) 是[纪阳](https://github.com/stefanJi)同学用 Flutter 实现的一个 GitLab 客户端，只实现了一部分功能。对于正在学习 Flutter 的同学是一个不错的一手参考资料, 项目中的一些插件的使用很是值得学习, 比如：

- xml 解析
- html 标签展示
- 通过 stetho 连接 Chrome 的 Network Inspector

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（OldDriverWeekly）会推送消息，欢迎关注。

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需翻墙，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
