开发的点点滴滴,想到什么写什么。。
1.iOS9下适应HTTP连接:
比较无敌的做法是在info.plist加入如下xml代码
<key>NSAppTransportSecurity</key>
<dict>
<!--彻底倒退回不安全的HTTP网络请求,能任意进行HTTP请求 (不建议这样做)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
当然为了安全起见,我们可以只对特别的域名进行HTTP连接(如允许api.insecuredomain.com这个域名下的http连接)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>api.insecuredomain.com</key>
<dict>
<!--允许App进行不安全的HTTP请求-->
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--适用于这个特定域名下的所有子域-->
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
2.在适配iOS9的时候,遇到过ColletionView不能正确显示内容的情况
这个问题可以参考我在stackoverflow的回答。
3.自定义控件布局时机的问题
一般来说,假如是使用frame布局需要在layoutsubviews方法下布局,而使用Autolayout布局则需要在初始化的时候布局(如 initWithCoder or initWithFrame,这两个方法是取决于控件加载方式)。
4.如何给NavigationBarItems设置彼此之间的间距
let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
spacer.width = 15
viewController.navigationItem.leftBarButtonItems = [backItem, spacer, logoItem]
5.Swift2.0 Singleton
public class ABC {
public static let instance = ABC() //static修饰的变量会懒加载
private init(){ }
}
6.iOS唯一标识
使用KeyChain
7.Swift initialize问题
当Swift的类是继承于OC类的时候,initialize方法是可以被重载的。如果是一个Swift的类则可以在init方法里使用disptach_once来确保部分代码仅运行一次。
8.Swift KVO
Swift内默认禁止动态派发,如果使用KVO,我们需要把Swift类的属性标记为dynamic。
[官方例子](Using Swift with Cocoa and Objective-C: KVO Observing)
如果是继承于OC的类则可以直接使用KVO。
9.单例模式 VS 静态方法
单例模式: 可以延迟加载,继承父类。
静态方法: 直接加载到内存。
一般来说,我还是用单例模式比较多。
10.测试后台给的API时候有什么好用的工具
11.使用AutoLayout做Cell的自适应高度布局
注意需要补全cell内的约束(上,下,左,右)都需要。
注意需要把tableview的高度设置为tableView.rowHeight = UITableViewAutomaticDimension
。
而且代理方法override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
返回UITableViewAutomaticDimension
.
12.AutoLayout中的“Content Compression Resistance”和“Content Hugging”
“Content Compression Resistance Priority”,也叫内容压缩阻力优先级(小名:别挤我),该优先级越高,则越晚轮到被压缩。
“Content Hugging Priority”,也叫内容紧靠优先级(小名:别扯我),该优先级越高,这越晚轮到被拉伸。
更详细,戳这里。