0%

atomic

默认属性,系统在生成 get / set 方法时通过自旋锁保证 get / set 操作的完整性,当多个线程同时访问属性时,能够保证操作按顺序执行。

如果重写了 get / set 方法,那 atomic、nonatomic、copy 等修饰符都将毫无卵用。

锁会产生额外开销,所以使用 atomic 修饰的变量读写速度不快。

atomic 只能保证多线程下的读写安全,当其它线程释放了这个对象时,就可能会造成 crash,所以 atomic 并不是线程安全的。

阅读全文 »

iOS 基础知识整理

1. Tagged Pointer

概括:将本来用于存储对象指针的空间存储数据,以节省空间、提高效率。

在 32 位设备中,NSNumber、NSDate 这类对象占用的空间是 8 字节(对象指针 4 字节 + 对象值 4 字节),而到 64 位设备中,占用的空间则是 16 字节(对象指针 8 字节 + 对象值 8 字节),空间上翻了一倍。效率上,NSNumber、NSDate 会在堆上分配空间存储对象的值,同时还要维护对象的引用计数进行销毁释放,效率不高。

阅读全文 »

Crash 相关

  1. 针对 iOS 8.4 及以下系统,在 layoutSubViews 方法中,不要删除一个 View(view = nil)。

Travis-CI简介

Travis CI是一个托管的,分布式的持续集成服务,用于构建和测试在GitHub上托管的软件项目。

利用 Travis CI ,可以实现每次 push 新文章到 git 后,Travis CI 会自动检测到提交,然后根据配置文件 “.travis.yml”,按照设定好的步骤帮我们自动部署网页。

阅读全文 »

1. unacceptable content-type 错误

这个错误表示回包类型无法解析,一般这种情况请求回包的状态码是:200,表示错误并不在后台。详细错误描述为:

Request failed: unacceptable content-type: text/plain(或者 text/html)

可以看出错误的原因是 AFNetworking 框架并不支持解析 plainhtml 类型的数据。

解决办法:AFURLResponseSerialization.h 类里面找到 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
然后在后面追加 @"text/html", @"text/plain"两个参数即可。
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];

NSCache 是什么

简单的理解,NSCache 就是一个可变的键值对集合,类似于 NSMutableDictionary,用于存储一些临时数据。在内存吃紧时 NSCache 会自动释放存储的临时数据。

阅读全文 »

随着 APP 版本的迭代,安装包无法避免的会变的越来越大。分析安装包的构成可以发现,安装包主要是由资源文件和代码构成的,所以从这两个点出手优化可以达到一个很明显的效果。同时编译选项的配置也会对安装包的大小有一定影响。

阅读全文 »

前言

之前有介绍过如何安装 CocoaPods(传送门),对于CocoaPods的好处自然也不必多说。然而有些情况下,我们想要管理自己的库,但还不想把这些库开源,这时就需要构建一个私有的 CocoaPods 仓库。

在前面安装 CocoaPods 的教程中有提到:pod setup 的本质就是将 https://github.com/CocoaPods/Specs 上的 Specs 项目 clone到 /Users/ 用户名 /.cocoapods/repos 目录下。同理,我们在 git 上创建一个私有的仓库,用于存储私有的库文件,然后将这个私有仓库添加到 CocoaPods 中即可。

阅读全文 »

Mac 系统默认有安装 Python2.7 ,但是这个版本已经过时了,Python3 作为一次革命性的更新,取代 Python2.x 版本只是时间问题。作为一个开发人员,我们一定要跟上时代的潮流!

阅读全文 »