NSTimer 是 iOS 上的一种计时器,通过 NSTimer 对象,可以指定时间间隔,向一个对象发送消息。NSTimer 是比较常用的工具,比如用来定时更新界面,定时发送请求等等。但是在使用过程中,有很多需要注意的地方,稍微不注意就会产生 bug,crash,内存泄漏。本文讲解了使用 NSTimer 时需要注意的问题。
解析 crash 堆栈
本文介绍了如何解析 iOS 的 crash 堆栈,分别使用了 symbolicatecrash
来自动解析整个堆栈,以及使用 atos
来解析单个地址的符号。
在 iOS 开发中,解决 crash 问题是比较常见的工作。其中能够解析出符号当然是定位问题的开始。
实际工作中,也有看到很多人其实会卡在解析符号这里,遇到这种情况,可以按照本文中的做法解决。
Code Review CheckList 1
本文记录了一些 Objective-C 上的一些最佳实践,作用是每个人都可以通过本文描述的规则,对其它团队成员进行 Code Review。
另外,每个规则后面,会有一个规则代号,用中括号括起来,发现代码不符合某一条规则的时候,可以直接使用代号取代问题描述。比如看到某些代码不符合下面的第一条规则,可以在所在的代码行增加评论:[Be Modern]
。
Swift Highlight 3 :容器是结构体
Swift’s String
, Array
, and Dictionary
types are implemented as structures. This means that strings, arrays, and dictionaries are copied when they are assigned to a new constant or variable, or when they are passed to a function or method.
Swift 的 String
, Array
, 和 Dictionary
类型是用结构体实现的,而结构体是一种值类型,在赋值,参数传递过程中,会使用直接拷贝内存的方式。所以,这些字符串,数组,字典等对象在这些操作里面,将会被拷贝,跟原来的对象互不影响。
Swift Highlight 2 :范型
Swift 相比 Objective-C 的一项改进就是引进了范型(Generic Type),有了范型,我们可以通过指定容器中对象的类型,让编译器可以做更多的类型检查。
Swift Highlight 1 :结构体的变量可以直接更改
Unlike Objective-C, Swift enables you to set sub-properties of a structure property directly.
跟 Objective-C 不一样,Swift 中的一个属性是结构体的话,这个结构体的变量是可以被直接改变的。
iOS8 转屏 Bug 汇总
iOS8 对页面的旋转机制做了一些改变,这些改动也带来了不少问题。
本文介绍三个已经发现的问题,并尝试给出解决方案。
iOS8 导航控制器横屏页面弹出竖屏页面的实现
我们都知道,同一个导航控制器中,我们可以做到两个不同的页面有不同的方向。
例如一个页面支持竖屏,我们 push 一个新的页面,支持横屏。
本文介绍了这种情况下,iOS 8 做 pop 动画的实现。
NSHashTable 引起的性能问题
本文介绍了在 Core Text 排版中,往 NSAttributeString 增加一个属性时引起的性能问题。
iOS 增量更新机制介绍
从 iOS6 开始,iOS 引入了增量更新(delta update),App Store 对应用的新版本更新的提交,会自动生成增量更新包。
用户在更新应用的新版本的时候,只会下载差异部分,这样就加快了下载速度,也同时提升了安装速度。
本文介绍了 iOS 的增量更新机制,以及优化应用安装包大小时应注意的问题。