使用 NoticeBoard 迅捷而优雅地发布通知

Android 有原生的 SnackBar ,iOS 没有与之相似的原生控件,GitHub 上好像也没有找到特别好用的开源库。

既然在 Android 平台上能够作为原生控件存在,足以说明这种需求不算太不小众,在 iOS 端,类似的需求可能被 UIAlertController、MBProgressHUD 来替代,但是他们都需要打断用户当前正在进行的事情,体验很不好。GitHub 上有一个开源库 NoticeBar ,模仿 QQ的实现效果 ,虽然有200+的Star,个人感觉 UI 和可定制性都不够理想,于是自己写了一个模仿系统原生通知样式的易于定制的 NoticeBoard,下面请看截图和演示效果:

iOS 开发工程师面试心得

最近找工作已经面试了6家公司,既有初创公司也有上市公司,现利用周末时间总结一下面试被问的频率高的技术问题,本文最近几天会持续更新。

技术点 频率
Runtime机制及其应用 ★★★★★
RunLoop原理及其应用 ★★★★★
多线程技术 ★★★★★
网络技术 ★★★★★
内存管理理解及其应用 ★★★★★
性能优化 ★★★★★
系统架构设计 ★★★★☆
Block ★★★★☆
CoreGraphics、UIBezierPath、CoreAnimation ★★★★☆
数据结构和算法 ★★★★☆
第三方库 ★★★☆☆

其中智能硬件行业的公司会问蓝牙BLE的技术点:数据分包、传输、校验、加密。
另外,AXKit(个人开源库)的简介中的功能的实现思路也是必问的。

整理混乱不堪的各国语言翻译

现状

linksmart项目截止目前已经支持了17个国家的语言,从诞生到现在也已经经历了很多程序员的修改和维护,代码已经变得十分混乱。因为公司一直在接新的定制项目,所以也没有时间进行一次彻底的重构,只能在维护某方面的BUG的时候,对相关代码进行局部重构。现在的情况是:

  • 同一个文本有些语言有翻译,有些语言没有翻译。
  • 有些需要使用缩进的地方,由于某种原因,并没有使用UIEdgeInsets进行缩进,而是在文本前后加空格。(⊙﹏⊙)b

整理思路

首先必须得找出一种合适的方法维护这些Localizable.strings,在Excel里做一个总表,增加语言的时候,可以直接把英文的一列发给客户进行翻译。最大的优势是:随时可以用脚本把Excel里的所有语言导出成项目支持的Localizable.strings文件,极大提高效率。

iOS 推迟而不重复执行函数

如果你想推迟执行一段代码,使用dispatch_after函数可以轻易实现,但有时候我们想在它delay的期间再次delay,直到最终不再delay的时候,才真正的被调用一次。这就需要每次先将旧的事件取消,然后重新设置delay。

git 命令及客户端的详细使用

Dev

git教程:廖雪峰的git教程git教程

Git与SVN的区别

  • git是分布式版本控制系统,SVN是集中式版本控制系统。详见: 集中式vs分布式
  • git把内容按元数据方式存储,而SVN是按文件。
  • git版本库可以离线查看所有log,可以离线提交,而SVN不可以。
  • ……更多区别详见: Svn与Git的区别

操作流程

SVN

  1. update(将远程版本库代码更新到本地)
  2. commit(将本地代码提交到远程版本库)

git

  1. commit(将本地代码提交到远程版本库)
  2. fetch(将远程版本库的改动下载到本地(未合并))
  3. merge(合并两个分支(本地、远程))
  4. push(将最新的版本库同步到远程服务器)

显而易见:SVN的操作简单明了,git学习成本比SVN高一点。但是由于git是分布式的,所以不需要联网就可以将代码改动立即提交。提交到本地版本库之后,本地和远程的版本就不一样了,因此需要fetch、merge、push来同步版本库。

那么这点区别有什么意义呢?将代码提交到版本库里就有了记录,就可以查询可以恢复,相当于游戏的存档,而与远程服务器的交互因为需要网络,就有很大的不稳定因素,可能会失败,相当于游戏的打BOSS。SVN是将存档和打BOSS绑定到了一起,要打了BOSS后才可以存档进度;而git由于版本库在本地,所以随时随地可以存档,并且要求打BOSS前必须存档。

使用git最大的感触就是安全(故障率低、易恢复)、速度快

如何搭建基于 Hexo 的独立博客

如果你的电脑是 macOS 系统,又比较懒,你可以选择使用下面这行脚本命令全程自动化完成,下面文章就可以不用看了。

打开终端,cd 到你想创建博客的地方,执行这一行命令:

1
curl -O 'https://raw.githubusercontent.com/xaoxuu/hexo.sh/master/hexo.sh' -# && chmod 777 hexo.sh && . hexo.sh -i init

当然,如果你想知其所以然,最好还是看一下本文。

Objective-C 与 Swift 混编

Demo下载:OCSwiftDemo.zip

Swift调用Objective-C

Swift调用Objective-C文件比较简单。当在Swift工程中新建Objective-C文件或者在Objective-C工程中新建Swift文件时,Xcode会自动提示你是否创建bridging header桥接头文件,点击创建后Xcode会自动为你创建一个桥接头文件。 在基于OC的OCSwiftDemo中创建一个Swift文件或者在Swift项目中创建OC文件时,Xcode会自动创建一个名为SwiftProject-Bridging-Header.h桥接头文件。

iOS 接入 Strava 分享模块(下篇:StravaSDK)

StravaKit 是一个比较新而且代码比较规范的第三方SDK,但是目前还没有上传功能(详见 todo) 。所以我不得已对StravaKit 0.9.5增加上传功能,并进行一些简单封装和改编,使之能够植入到公司项目中。由于时间有限,我只增加了上传fit文件的功能,并且使用了第三方框架Alamofire,所以需要在项目中导入Alamofire