很久很久以前

刚从业时,是做Java后端的
我们知道Integer是int的包装类,2个int类型的值是可以通过a == b来进行比较的
于是想当然以为Integer也是可以这么比较

一次事故就要开始

一个简单的充值验证,需要比较充值数额是否相等,用的Integer类
我们测试的时候用的是1块钱(10金币),比较金币拿了2个Integer来做==判断
10金币顺利通过测试,100金币也是,随之上线

事故的爆发

产品上线后,从后台查询发现,只有10金币和100金币的充值记录(但按经验看来是不合理的)
也有玩家陆续反应100块(1000金币)充值失败

原因

Java中<128的Integer取的是常量,内存地址是一样的,>=128时,则是重新开辟了一块内存
又因为==是比较内存地址用的,比较值相等应该用a.equals(b)

测试代码

输出

问题的出现

iOS 项目中使用了MJRefresh,在 xcode6中使用 objc_msgSend 会报错Too many arguments to function call…

解决方案

在 Building Setting 下Apple LLVM 6.1 – Preprogressing下的Enable Strict Checking of objc_msgSend Calls设置成No

吐槽

苹果每次升级 xcode/iOS 都会出现一堆不兼容,然后你又可以通过设置某个值再去兼容,简直是 x 裤子放 y,像 arc 的编译参数之类的,自动判断一下啊… 恩 吐槽好了就舒服了

FMDB

全称FMDatabase,是一个用Objective-C写的sqlite封装

下载

可以通过github下载源码包,复制src/fmdb/下所有文件到项目目录下
也可以通过CocoaPods,添加pod 'FMDB'到配置文件中

代码

在Swift项目中添加Objective-C代码,会提示添加Bridgging-Header
在Bridgging-Header.h中添加#include "FMDB.h"就像写C的头文件那样
然后Swift里就可以用FMDB的所有类了

获取DB

添加数据

删除数据

查找数据

Enjoy it!

找回了一点写后端的感觉,呕吼吼吼