iOS开发的一些奇巧淫技,
“奇巧淫技”并非是一些稀奇古怪的技术要点,也不是什么所谓的黑科学,只是一些平时可能会用到但有些又并不是很容易查询得到的小tips.
如何查看真机沙盒文件
一:安装iFunBox或IExployer
二:设置
在xcode的上部导航栏里,选择window -> Devices,找到目标app,双击选中项目,
Practice from here
iOS开发的一些奇巧淫技,
“奇巧淫技”并非是一些稀奇古怪的技术要点,也不是什么所谓的黑科学,只是一些平时可能会用到但有些又并不是很容易查询得到的小tips.
在xcode的上部导航栏里,选择window -> Devices,找到目标app,双击选中项目,
在了解xcode构建原则之前,需要熟悉workspace相关的概念,即workspace,project和target。
target指定了构建的product,包含将workspace或project中的一组文件构建成product的指令。单个target定义一个product,它将输入(源文件和处理这些源文件的指令(包含所设定的构建settings和phases))组织进构建系统中。project和target是一对多的关系。
target会继承project的build settings,但可以以target为粒度设置build settings,且Xcode中当前一次只会有一个有效target,此有效target在xcode scheme中标识。
若target A依赖target B的输出来构建,则A依赖B,当它们存在于一个xcode workspace中的时候,Xcode会发现此依赖关系并按顺序构建。这种依赖称为隐性依赖,当然也可以在build settings中声明显性依赖,也可将隐性依赖的两个target显性声明为没有依赖。比如可能在同一个workspace中同时构建一个库并构建一个依赖这个库的应用,则xcode会选择先构建库。但如果应用想链接库的某个特定版本,则可以显性声明这个依赖关系,此时隐性依赖即被覆盖了。
对于一个优秀的app来说,缓存机制必不可少。图片,视频,音频等等各种类型的文件,怎么样去更好的管理这些数据,这对于我们开发者以及用户都是息息相关的。闲话不多说,先来看看几个github开源中牛逼的几个缓存框架。
它们的使用方式都很类似,都是通过键值对(key-value)的形式进行存取,跟NSUserDefaults
用法类似。
以下排名按照性能由低到高:
只提供磁盘缓存,没有内存缓存,一个比较简易的缓存框架。
最初由 Tumblr 开发,但现在已经不再维护了。TMMemoryCache 实现有很多 NSCache 并没有提供的功能,比如数量限制、总容量限制、存活时间限制、内存警告或应用退到后台时清空缓存等。TMMemoryCache 在设计时,主要目标是线程安全,它把所有读写操作都放到了同一个 concurrent queue 中,然后用 dispatch_barrier_async 来保证任务能顺序执行。它错误的用了大量异步 block 回调来实现存取功能,以至于产生了很大的性能和死锁问题。它有磁盘缓存和内存缓存两部分组成,个人感觉一般好点的缓存库都会由磁盘缓存和内存缓存两部分组成,在我们第一次存储一个文件到磁盘的时候,缓存库会帮我们复制一份到内存缓存中,可以让我们在下次使用该文件的时候可以更快的找到。我上家公司就是用的这个缓存框架,挺好用的,也没出什么问题。
是 Tumblr 宣布不在维护 TMCache 后,由 Pinterest 维护和改进的一个内存缓存。它的功能和接口基本和 TMCache 一样,但修复了性能和死锁的问题。它同样也用 dispatch_semaphore 来保证线程安全,但去掉了dispatch_barrier_async,避免了线程切换带来的巨大开销,也避免了可能的死锁。相当于是TMCache的优化版,而且一直有更新。
有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现。
先看一下这篇博客,博客地址:http://www.brighttj.com/ios/ios-implement-loop-progress.html
这篇博客写的不错,不过看上去还是略微复杂了,我自己根据自己的思路整理了一下,当然目的是为了更加简洁易懂。
自定义一个cycleView,在.m 中实现drawRect方法
1 | - (void)drawRect:(CGRect)rect { |